我在我的应用程序中使用WKWebView。我发现各种链接都不可点击,即使我通过app传输安全性允许任意加载。例如,单击所有Adsense内容和来自其他提供商的广告无效。 WebView甚至没有返回任何进展。
此外,尝试单击iTunes链接(即App Store徽章)将不会重定向到App Store应用程序。 WebView将注册进度,但不会离开初始页面。
另一个例子:单击Pinterest hompage上的徽章,提示您打开Pinterest应用程序中的某些引脚只会加载bnc.it
URL并显示一个空白页面,这是我认为是中介之间的中介Pinterest.com和Pinterest iPhone应用程序。
如果有人知道如何让WKWebView处理所有这些请求,我将非常感谢您听到如何这样做。
答案 0 :(得分:2)
好。我知道它是如何工作的。问题是关于navigationType。我使用了以下代理来完成这项工作。我已经使用我的应用程序进行了测试,但它很有用。只有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后执行其他操作。如果这个答案有帮助。请投票并接受。感谢。