WKWebview Якорные теги на той же странице, а не woking

У меня есть ряд Anchor-тегов на веб-странице, которую я показываю в своем приложении iPhone с использованием WKWebView.

Проблема в том, что нажатие на теги href не приводит меня к соответствующему якорю. Это использование отлично работает, когда я использую UIWebView, но теперь, когда я перешел на WKWebView, он не работает.

Я устанавливаю теги привязки следующим образом, пытаясь быть совместимым с HTML5:

<a href="#Test1"> Test1. </a>

<h2 id="Test1">

Когда я показываю веб-страницу в любом браузере или редакторе html или в внешнем редакторе XCode, теги привязки работают просто отлично, но не в WKWebView.

Это урезанный тестовый html (хотя он имеет длинные текстовые строки):

 <!DOCTYPE HTML> <html> <head> <title> </title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <style type="text/css"> .btt { font-size: 10pt; color: #000080; } </style> </head> <body> <h2 id="toc"> Table of Contents. </h2> <ul> <li> <a href="#Test1"> Test1. </a> </li> <li> <a href="#Test2"> Test2. </a> </li> <li> <a href="#Test3"> Test3. </a> </li> <li> <a href="#Test4"> Test4. </a> </li> </ul> <h2 id="Test1"> Test1 &nbsp;&nbsp;&nbsp; <a class="btt" href="#toc">Back to Top</a> </h2> <p> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. </p> <h2 id="Test2"> Test2 &nbsp;&nbsp;&nbsp; <a class="btt" href="#toc">Back to Top</a> </h2> <p> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. </p> <h2 id="Test3"> Test3 &nbsp;&nbsp;&nbsp; <a class="btt" href="#toc">Back to Top</a> </h2> <p> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. </p> <h2 id="Test4"> Test4 &nbsp;&nbsp;&nbsp; <a class="btt" href="#toc">Back to Top</a> </h2> <p> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. </p> </body> </html> 

Вот как я создаю WKWebView и загружаю html-файл в Obj-C:

 - (void) viewDidLoad { [super viewDidLoad]; htmlContent = @"failexample"; NSString *path = [[NSBundle mainBundle] pathForResource:htmlContent ofType:@"html"]; NSFileHandle *readHandle = [NSFileHandle fileHandleForReadingAtPath:path]; NSString *htmlString = [[NSString alloc] initWithData:[readHandle readDataToEndOfFile] encoding:NSUTF8StringEncoding]; WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; webView = [[WKWebView alloc] initWithFrame:[UIScreen mainScreen].bounds configuration:wkWebConfig]; webView.navigationDelegate = self; webView.UIDelegate = self; [webView loadHTMLString:htmlString baseURL:nil]; [self.view addSubview:webView]; } 

Я знаю, что клик обрабатывается в решенииPolicyForNavigationAction:

 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { if (navigationAction.navigationType == WKNavigationTypeLinkActivated) { NSLog(@"Got a click"): } decisionHandler(WKNavigationActionPolicyAllow); } 

Кто-нибудь знает, что я делаю неправильно или что мне нужно сделать, чтобы заставить это работать?

One Solution collect form web for “WKWebview Якорные теги на той же странице, а не woking”

Ваш пример отлично работает в iOS 10, поэтому я должен был предположить, что вы нашли ошибку в iOS 11. Лучшим курсом было бы упаковать все как простой примерный проект и представить Apple в качестве отчета об ошибке.

(Небольшое тестирование покажет, что большая часть того, что вы делаете, в том числе id и делегат навигации, не имеет значения. Ошибка заключается в том, что мы вообще не прокручиваем внутренние ссылки. Вы должны обрезать все, что может быть сокращено , чтобы показать проблему в самой простой форме.)

В качестве обходного пути загрузите файл через URLRequest:

  let url = Bundle.main.url(forResource: "failexample", withExtension: "html")! let req = URLRequest(url: url) wv.load(req) 

Или используйте локальный URL-адрес файла:

  let url = Bundle.main.url(forResource: "failexample", withExtension: "html")! wv.loadFileURL(url, allowingReadAccessTo: url) 

Затем будут работать внутренние ссылки. (Тем не менее, это обходное решение может быть не всегда практичным, я все же рассматриваю проблему как ошибку, тем более, что она отлично работала в iOS 10.)

  • Как автомасштабировать содержимое WKWebView?
  • Веб-страница не отображается с помощью WkWebView и Swift в iOS
  • при перенаправлении с кодом 302 WKWebView не может установить cookie
  • Отдельное хранилище файлов cookie для двоих (UIWebView или WKWebView)
  • Выбор текста в WKWebView: WKSelectionGranularityCharacter
  • Добавляет ли веб-страницу на главный экран iPad использование UIWebView или WKWebView
  • Функция WKWebView для обнаружения изменения URL-адреса
  • Ошибка iOS 7, связанная с WKWebView
  • WKProcessPool можно хранить на постоянной основе с помощью NSUserDefaults или что-то еще?
  • Почему я не могу сохранить WKWebView в ?
  • Поддержка HTTP-прокси с помощью WKWebView
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.