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

iOS WKWebView自定义协议请求被拦截问题求助

问题分析与解决方案

核心原因

你遇到的拦截并非App层面的ATS(App Transport Security)限制,而是**HTTPS页面的内容安全策略(CSP)**阻止了自定义协议customsource://加载的GLB资源。ATS配置仅管控App与服务器之间的网络请求合法性,无法干预Web页面内部的资源加载规则。

PNG能正常加载,大概率是因为CSP中对图片资源(img-src指令)的限制更宽松,允许了非HTTPS源,而GLB对应的3D模型资源(model-src指令)未被授权使用自定义协议。

解决步骤

1. 修改Web页面的CSP配置

检查页面的CSP规则(两种存在形式):

  • 页面中的<meta http-equiv="Content-Security-Policy">标签
  • 服务器返回的Content-Security-Policy响应头

需要在CSP中添加对customsource:协议的授权,针对GLB资源需配置model-src指令,若涉及网络请求加载还需配置connect-src,通用资源可通过default-src覆盖:

示例1:修改meta标签

<meta http-equiv="Content-Security-Policy" content="
    default-src 'self' https: customsource:;
    img-src 'self' https: data:;
    model-src customsource:;
">

示例2:修改服务器响应头

Content-Security-Policy: default-src 'self' https: customsource:; img-src 'self' https: data:; model-src customsource:;

2. 无法修改Web页面时,通过WKWebView注入CSP规则

如果无法直接修改Web页面的CSP,可通过WKWebView的用户脚本在页面加载前注入CSP配置:

Swift代码示例

// 创建注入CSP的用户脚本
let cspInjectionScript = WKUserScript(
    source: """
    const meta = document.createElement('meta');
    meta.httpEquiv = 'Content-Security-Policy';
    meta.content = 'default-src \\'self\\' https: customsource:; model-src customsource:;';
    document.head.insertBefore(meta, document.head.firstChild);
    """,
    injectionTime: .atDocumentStart,
    forMainFrameOnly: true
)

// 配置WKWebView并添加脚本
let webConfig = WKWebViewConfiguration()
webConfig.userContentController.addUserScript(cspInjectionScript)

let webView = WKWebView(frame: view.bounds, configuration: webConfig)
view.addSubview(webView)

关键提醒

ATS的Allow Arbitrary Loads和Allow Arbitrary Loads in Web Content配置对当前问题无效,因为它们解决的是App向非HTTPS服务器发起请求的限制,而非Web页面内部的资源加载拦截。

内容的提问来源于stack exchange,提问作者Tripurari Shankar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:28:31