IOS 11.1 SecurityError (DOM Exception 18): 阻止尝试使用 history.replaceState() 更改会话历史 URL

Posted

技术标签:

【中文标题】IOS 11.1 SecurityError (DOM Exception 18): 阻止尝试使用 history.replaceState() 更改会话历史 URL【英文标题】:IOS 11.1 SecurityError (DOM Exception 18): Blocked attempt to use history.replaceState() to change session history URL 【发布时间】:2018-04-19 02:16:13 【问题描述】:

我正在使用 Cordova 和 jQuery Mobile 开发一个移动应用程序。我的应用程序在 ios 11.0.3 上运行良好,然后当 iOS 11.1 发布时,我收到一个错误,无法点击任何链接。我在 safari 错误控制台中得到的错误是“SecurityError (DOM Exception 18): Blocked attempt to use history.replaceState() to change session history URL。”我添加了<meta http-equiv="Content-Security-Policy" content="default-src * data: blob: ws: wss: gap://ready file://*; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'; connect-src * ws: wss:;">,因为我认为它可能是内容安全策略的一部分,但我仍然收到同样的错误。我正在使用 jQuery Mobile 1.4.5 和 jQuery 2.1.1。

【问题讨论】:

我们在使用 Cordova 的 Angular 1.7 应用程序上遇到了同样的问题。引入 11.1 后,我们的应用程序已停止工作。我们在阅读这篇文章之前添加了描述的元标记,但它并没有解决问题。 【参考方案1】:

请更新 angular.js 文件中的以下值。

旧值:

this.$$absUrl = appBaseNoFile + this.$$url.substr(1); 

新价值:

this.$$absUrl = appBaseNoFile + this.$$url;

ios11 会因此报错:file:/// != file://

【讨论】:

我没有使用 AngularJS。我为此使用 jQuery Mobile。您还有什么其他建议可以使用吗? 有没有比修改核心角度更好的解决方案来解决这个问题?【参考方案2】:

我也有同样的问题。

禁用 html5 模式对我有用(因为我没有使用路由或状态提供程序)

【讨论】:

你是如何禁用 html5 模式的? 我认为它对你不起作用,因为它只适用于 angular.js;

以上是关于IOS 11.1 SecurityError (DOM Exception 18): 阻止尝试使用 history.replaceState() 更改会话历史 URL的主要内容,如果未能解决你的问题,请参考以下文章

iOS 11.1 UIImagePickerController 视频裁剪开始时间不可移动

iOS 11.1Beta与11.0.1比速度 提高不明显

Xcode 11.1如何安装iOS14模拟器?

更新到iOS 11.1后,Alamofire 4.5.1失败

iPad:iOS11.1正式版体验简评

Xcode 版本 9.1 (9B55) 上传存档失败 - iOS 11.1 - 应用程序必须使用公共 (GM) 版本构建