WKWebView可加载同域名链接但无法加载外部域名站点求助
WKWebView跨域链接点击无响应修复方案
核心问题原因
- 未给WKWebView设置
WKNavigationDelegate代理,你自行实现的decidePolicyForNavigationAction方法不会被系统回调,跳转限制逻辑不生效 - 谷歌等站点大量外链使用
target="_blank"属性要求新开窗口加载,WKWebView默认不处理新开窗口请求,因此点击无反应 - 控制台输出的
restrictWeb = 1日志不影响功能,日志明确标注_WebFilterIsActive returning: NO,系统网页过滤功能未启用,和当前问题无关 - ATS配置你已经设置正确,不需要再调整相关参数
具体修复步骤
修改HubViewController代码,遵循代理协议、设置代理、实现新开窗口处理逻辑即可,完整修改后代码如下:
import UIKit import WebKit class HubViewController: UIViewController, WKNavigationDelegate, WKUIDelegate { @IBOutlet var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() // 绑定两个必要代理 webView.navigationDelegate = self webView.uiDelegate = self let url = URL(string: "https://somewebsite.com") let request = URLRequest(url: url!) webView.load(request) } // 处理所有导航跳转策略 func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { // 无特殊拦截需求直接允许所有跳转 decisionHandler(.allow) } // 处理新开窗口的外链跳转 func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? { // 检测到新开窗口请求,直接在当前webView加载 if navigationAction.targetFrame == nil { webView.load(navigationAction.request) } return nil } }
内容的提问来源于stack exchange,提问作者vances678
相关产品推荐
相关产品推荐

