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 ScrollView
  • Клавиша «done» нажала кнопку для UIWebView и WKWebView
  • Переопределение MPNowPlayingInfoCenter при использовании WKWebView
  • Эквивалент WKWebView для масштабирования UIWebViewPageToFit
  • Выбор текста в WKWebView: WKSelectionGranularityCharacter
  • iOS Полноэкранный захват WKWebview со встроенным видео Youtube
  • Загружать пользовательскую ошибку htmlString, когда WKWebView loadRequest терпит неудачу
  • при перенаправлении с кодом 302 WKWebView не может установить cookie
  • Как я могу исправить нарушенные функции, вызванные запрещенным useragent?
  • iOS WKWebView получает цвет пикселя RGBA от точки
  • Interesting Posts

    Как оживить CCSprite в Cocos2D 3.x?

    Как обнаружить iOS 6 и все младшие версии с помощью пользовательского агента?

    NSDate возвращает «1604» за год?

    Обнаружить объект изображения из UIImage с помощью OpenCV

    Неверная ширина содержимого в пользовательском UITableViewCell?

    Как настроить передающую функцию, связанную с Head (HRTF) в OpenAL или Core Audio?

    Получение всех ресурсов с именем, начинающимся с 001XXX.jpg

    NSURLSessionTask. Приостановка не работает

    Swift: как передать закрытие в качестве аргумента функции

    Ошибка анализа Phonegap 3.3.0 config.xml

    Метод делегата alertViewShouldEnableFirstOtherButton не вызывается

    Рамка фотографий: сохранение данных exif из сборщика (диафрагма, фокусное расстояние, скорость затвора, …)

    Может ли кто-нибудь найти IdentifierForVendor (IDFV) ваших приложений, если у вас есть физический доступ к устройству?

    Возможно ли запустить симулятор iOS 4.0?

    Где использовать функции многократного использования в IOS Swift?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.