簡體   English   中英

WKWebView 不會對點擊做出反應,而 UIWebView 會

[英]WKWebView doesn't react on clicks while UIWebView does

上周我遇到了 WKWebView 的問題。

我的任務是呈現一個橫幅,該橫幅作為包含腳本 (javascript) 的鏈接發送給我。

我在瀏覽器(chrome)中測試了代碼,一切正常。 它顯示正確,並通過打開一個新網站(羅馬尼亞沃達豐網站)響應我的點擊。

在 UIWebView 中測試了代碼。 它顯示正確,並通過打開一個新網站來響應我的點擊。 這里唯一的問題是,如果我點擊它,委托回調

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

響應UIWebViewNavigationTypeOther而不是UIWebViewNavigationTypeLinkClicked正如我預期的那樣。

當我在 WKWebView 中測試它時,我聽說 UIWebView 將在 iOS 12 中被棄用,只有橫幅的框架是可見的。 我了解到我在加載 HTML 字符串時必須傳遞一個 baseURL,因為腳本需要一個引用:

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 中點擊了此橫幅?

我對 Adform 廣告有同樣的問題。 核心問題與target="_blank"或從 JS 做類似的事情有關(Adform JS 嘗試在新選項卡中打開 url)。

解決方案最初發布在這里: https : //stackoverflow.com/a/25853806/2124345

實現WKUIDelegate委托並將其設置為_webview.uiDelegate 然后執行

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
  // to handle inside wkwebview
  // if (!navigationAction.targetFrame.isMainFrame) {
  //   [webView loadRequest:navigationAction.request];
  // }

  // to open safari:
  [[UIApplication sharedApplication] openURL:navigationAction.request.URL  options:@{} completionHandler:nil];

  return nil;
}

請注意 uiDelegate != 委托。 這是兩種不同的協議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM