我有一个用 cordova 封装的 angular 4 应用程序,它在 iOS11.1 之前运行良好
将手机升级到iOS11.1我现在收到错误
Error: Uncaught (in promise): SecurityError (DOM Exception 18): Blocked attempt to use history.replaceState() to change session history URL from file:///var/containers/Bundle/Application/CE4A6135-633D-49B9-9A1D-28CBFF5AB832/MyAppName.app/www/index.html to file:///var/containers/Bundle/Application/CE4A6135-633D-49B9-9A1D-28CBFF5AB832/MyAppName.app/www/. Paths and fragments must match for a sandboxed document. replaceState@[native code] replaceState@file:///var/containers/Bundle/Application/CE4A6135-633D-49B9-9A1D-28CBFF5AB832/Real%20Yeti.app/www/
我的基础标签如下<base href="./">
从外观上看,它对 url 进行了字符串比较,并认为我正在尝试访问沙盒区域之外的内容,并阻止了它
但是我确实需要指定一个基本 href,否则所有链接等都将基于手机的根目录(而不是应用程序文件夹)并中断。
有人知道如何解决这个问题吗?
(iOS11.1.1、iOS11.2 存在问题)
最佳答案
我已经使用 HashLocationStrategy 解决了这个问题。
这将通过/#/加载 url,这不会触发错误。
我改变的是:
在 index.html 中将 base href 设置为 #
<base href="#">
在 app-routing.module.ts 添加了 useHash 选项
RouterModule.forRoot( routes, { useHash: true } ),
在 app.module.ts 中确保 RoutingModule 是导入数组中的最后一个
imports: [
...,
AppRoutingModule,
],
关于angular - iOS11 Cordova Angular 4 wrap breaking SecurityError : history. replaceState(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47805178/