На прошлой неделе я столкнулся с проблемой с WKWebView.
Моя задача - сделать баннер, который будет отправлен мне в виде ссылки, содержащей скрипт (javascript).
Я протестировал код в браузере (chrome), и все заработало нормально. Он отображается правильно и отвечает на мой щелчок открытием нового веб-сайта (румынский веб-сайт vodafone).
В проверенном коде в UIWebView. Он отображается правильно и отвечает на мой щелчок открытием нового веб-сайта. Единственная проблема здесь заключается в том, что если я нажму на нее, обратный вызов делегата
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
отвечает UIWebViewNavigationTypeOther
вместо UIWebViewNavigationTypeLinkClicked
, как я ожидал.
Когда я тестировал его в WKWebView, я слышал, что UIWebView устарела в iOS 12, была видна только рамка баннера.
Я узнал, что мне нужно было передать baseURL при загрузке строки HTML, потому что скрипту требовалась ссылка:
NSURL* baseURL = [NSURL fileURLWithPath:NSTemporaryDirectory()];
[self.webView loadHTMLString:displayHTML baseURL:baseURL];
Таким образом, баннер теперь отображается правильно, но он вообще не реагирует на клики. Он не открывает новый веб-сайт, как в браузере или UIWebView.
Обратный звонок
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
вызывается изначально несколько раз, до / когда загружается баннер, но если я нажимаю на баннер, он больше не вызывается, как это обычно происходит с моими баннерами.
Итак, это HTML-код для баннера. Я немного скорректировал его, чтобы удовлетворить свои визуальные потребности:
Не знаю, почему этот фрагмент кода выдает ошибки, но в браузере работает нормально.
Итак, мои вопросы:
1. Как заставить WKWebView реагировать на нажатие на баннер с открытием нового веб-сайта, как это делают Chrome или UIWebView?
2. Как мне проверить, нажимает ли кто-нибудь на этот баннер в WKWebView?