WKWebView не реагирует на клики, а UIWebView - - PullRequest
0 голосов
/ 04 июля 2018

На прошлой неделе я столкнулся с проблемой с 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-код для баннера. Я немного скорректировал его, чтобы удовлетворить свои визуальные потребности:

<html><head><meta name='viewport' content='initial-scale=1.0 user-scalable=no'><style>body {margin:0; padding:0;}</style></head><body><div style="display:flex;align-items:center;height:100%;justify-content:center;"><script type="text/javascript">
      rubicon_cb = Math.random(); rubicon_rurl = document.referrer; if(top.location==document.location){rubicon_rurl = document.location;} rubicon_rurl = escape(rubicon_rurl);
      window.rubicon_ad = "3791706" + "." + "js";
      window.rubicon_creative = "4044326" + "." + "js";
    </script>
<div data-rp-type="trp-display-creative" data-rp-impression-id="f09f735f-2db6-4677-bc64-2b80d451a290"><div style="width: 0; height: 0; overflow: hidden;"><img border="0" width="1" height="1" src="http://beacon-eu-ams3.rubiconproject.com/beacon/d/f09f735f-2db6-4677-bc64-2b80d451a290?oo=0&accountId=17430&siteId=169868&zoneId=818862&sizeId=67&e=6A1E40E384DA563B28B0B06C6D1183C2FA763FA5D91CB8A8A8B54C16031856825AA6F7B7A9E82EEDBED373B9F464F8B8C1EBE65E7377AC8DC35C8ED1F4E9551DA6D708C9FC571E6367FB59E688C57D0C37971816704066127FA46CD2A2EEB5352DF666B7E491F6D5EFF5C7CFD889081A9D6EE7558D6A842EA8D5522938A900F9A297B4BA53400D207EB9007C3FCC2BFC7E625848872D964AFC3BE8685EBA97EB13CC5F7EED8F0DBFD355BC846AF674595F8D0E597F1944BC6F52CA272C1DFBDD497A12E85F2B705143E9A407AF5D2E15" alt="" /></div>


<script type='text/javascript' src='http://track.adform.net/adfscript/?bn=23642762;rtbwp=0FE450112ED5343B;rtbdata=KJxCPgB7xRv_-g_FTwwHdJBx9UNuZfHmHihwlwcvnsIIIMur8HpBf6znV-RRXpnrUJSmZRGZj1X8draI56UzVxylUSkRLExBRaQQsK91g3mxJIoeVkC04QnIz5H-_QFGi1jNITEiz0obDKNaIZr13h5c12erP2BlZpyoToCUfkVqeX-EWiytwu7-gGsbFAkEop9UBofZXJqtjqM6J_oGULxo38C9RWsKq8ejeN5azUB_lD_IfjoPwPDyw_dJafnq4UFuhV40q881;OOBClickTrack=http://beacon-nf.rubiconproject.com/beacon/v2/t/0/f09f735f-2db6-4677-bc64-2b80d451a290/'></script>
<div style="height:0px;width:0px;overflow:hidden"><iframe src="https://eus.rubiconproject.com/usync.html?&geo=eu&co=de" frameborder="0" marginwidth="0" marginheight="0" scrolling="NO" width="0" height="0" style="height:0px;width:0px"></iframe></div></div>

</div></body></html>

Не знаю, почему этот фрагмент кода выдает ошибки, но в браузере работает нормально.

Итак, мои вопросы:
1. Как заставить WKWebView реагировать на нажатие на баннер с открытием нового веб-сайта, как это делают Chrome или UIWebView?
2. Как мне проверить, нажимает ли кто-нибудь на этот баннер в WKWebView?

...