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

iOS Interface Builder添加的WKWebView如何启用limitsNavigationsToAppBoundDomains

WKWebView Interface Builder 拖拽实例配置 App Bound Domains 方案

核心问题说明

你当前的代码不会生效,核心原因是:通过Interface Editor(Storyboard/Xib)拖拽生成的WKWebView,其WKWebViewConfiguration属性为只读属性,你在viewDidLoad中新建的配置实例没有和已有的webView绑定,不会生效。

以下是两种可用解决方案:

方案1:改为代码创建WKWebView(线上版本首选,无兼容性风险)

直接删除Interface Editor中拖拽的WKWebView,改为代码初始化,创建时传入自定义配置即可。完整代码示例:

import UIKit
import WebKit

class ViewController: UIViewController {
    var webView: WKWebView!
    var subdomain:String = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 初始化自定义配置
        let configuration = WKWebViewConfiguration()
        configuration.limitsNavigationsToAppBoundDomains = true
        // 代码创建WKWebView并绑定配置
        webView = WKWebView(frame: view.bounds, configuration: configuration)
        webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        view.addSubview(webView)
        // 加载页面
        guard let url = URL(string: "https://\(subdomain).domain.com") else { return }
        webView.load(URLRequest(url: url))
        webView.allowsBackForwardNavigationGestures = false
    }
}

该方案所有配置项都可自定义,无审核风险,是官方推荐的实现方式。

方案2:保留拖拽WebView,通过KVC注入配置(仅推荐测试使用)

如果你必须保留Interface Editor拖拽的WebView,可以通过KVC修改只读的configuration属性实现配置注入,代码如下:

import UIKit
import WebKit

class ViewController: UIViewController {
    @IBOutlet weak var webView: WKWebView!
    var subdomain:String = ""
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 自定义配置
        let configuration = WKWebViewConfiguration()
        configuration.limitsNavigationsToAppBoundDomains = true
        // KVC注入配置到已有webView
        webView.setValue(configuration, forKey: "configuration")
        // 加载页面
        guard let url = URL(string: "https://\(subdomain).domain.com") else { return }
        webView.load(URLRequest(url: url))
        webView.allowsBackForwardNavigationGestures = false
    }
}

注意:该方案修改了系统私有属性,存在App Store审核被拒的风险,不建议线上版本使用。


额外必填配置

仅设置limitsNavigationsToAppBoundDomains参数无法生效,你还需要在项目的Info.plist中添加对应域名配置:

  • 新增WKAppBoundDomains键,类型为数组
  • 数组中添加你的业务域名,例如*.domain.com,支持通配符格式
    此外该特性仅支持iOS 14及以上系统版本,低于iOS 14的设备需要做降级兼容处理。

内容的提问来源于stack exchange,提问作者Mark Denn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:24:03