WKWebView 中的广告不可点击

Ads not clickable in WKWebView

我在我的应用程序中使用 WKWebView。我发现很多链接都不可点击,即使我通过应用程序传输安全性允许任意加载也是如此。例如,点击所有 Adsense 内容和来自其他提供商的广告没有效果。 WebView 甚至 return 没有任何进展。

此外,尝试点击 iTunes 链接(即 App Store 徽章)不会重定向到 App Store 应用程序。 WebView 将记录进度,但不会离开初始页面。

另一个例子:点击 Pinterest 主页上提示您在 Pinterest 应用程序中打开某些图钉的徽章只会加载 bnc.it URL 并显示一个空白页面,这就是我假设是 Pinterest.com 和 Pinterest iPhone 应用程序之间的中介。

如果有人知道如何让 WKWebView 处理所有这些此类请求,我将不胜感激。

好的。我已经知道它是如何工作的了。问题与导航类型有关。我已经使用以下委托来完成这项工作。我已经用我的应用程序进行了测试,它可能会起作用。只有 Adsense 广告会打开 Safari。

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        let requestedURL = navigationAction.request.url

        if navigationAction.navigationType == .linkActivated{
            print("You have clicked the requested URL \(requestedURL)")
            if requestedURL?.absoluteString.contains("doubleclick.net") == true{
                UIApplication.shared.open(requestedURL!, options: [:], completionHandler: nil)
                decisionHandler(.cancel)
            }
        }
        decisionHandler(.allow)
    }

当然,你需要确定你已经声明了

webView.uiDelegate = self
webView.navigationDelegate = self

我还将完整的简化源代码放在我的 Github 中。不明白的可以到以下地址下载:

https://github.com/babyghost666/WKWebViewAdsense

随意更换,

UIApplication.shared.open(requestedURL!, options: [:], completionHandler: nil)

如果您希望 WKWebView 在用户单击 Adsense 后执行其他操作。如果这个答案有帮助。请投票并接受。谢谢