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

iOS 15下WKWebView调用evaluateJavaScript执行WebCrypto解密报错如何解决?

核心原因

报错信息中的y.importKey是JS代码压缩混淆后的缩写,实际对应WebCrypto的crypto.subtle.importKey接口,该接口未定义是iOS 15系统对WKWebView做的权限调整导致的:

从iOS 15开始,苹果遵循W3C标准规范,将WebCrypto的subtle系列加密接口限制为仅在安全上下文中可访问。不安全上下文(包括HTTP协议页面、本地file协议加载的静态资源、自定义scheme加载的页面)下crypto.subtle会默认被置为undefined,iOS 14及更早版本无该限制,因此升级系统后功能失效。

修复方案
  • 优先将加载的页面切换到HTTPS协议,本地调试时使用localhost作为访问地址,安全上下文下WebCrypto接口会自动恢复可用。
  • 如果业务必须使用非安全上下文(如加载本地离线包、自定义scheme路由场景),可以通过WKWebView配置项强制开启非安全上下文下的WebCrypto权限,Swift示例代码如下:
let webConfig = WKWebViewConfiguration()
if #available(iOS 15.0, *) {
    // 强制开启非安全上下文WebCrypto支持
    webConfig.preferences.setValue(true, forKey: "enableInsecureContextWebCrypto")
}
// 若使用file协议加载本地资源,还需额外开启文件访问权限
webConfig.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs")
let webView = WKWebView(frame: view.bounds, configuration: webConfig)
  • JS侧可新增前置兼容判断,避免未定义报错阻断流程,示例代码如下:
// 调用解密逻辑前先校验WebCrypto可用性
if (!window.crypto?.subtle) {
    console.error("当前环境不支持WebCrypto API,请检查页面加载协议");
    // 可在此处降级走其他加密方案
} else {
    // 原有importKey、解密逻辑
}

内容的提问来源于stack exchange,提问作者Kishore Suthar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:21:02