You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 22:54:02