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.1后,Alamofire 4.5.1失败
Xcode 版本 9.1 (9B55) 上传存档失败 - iOS 11.1 - 应用程序必须使用公共 (GM) 版本构建