我有一个用cordova包裹的角度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="./">
从它的外观来看,它在网址上进行字符串比较,并认为我试图访问沙盒区域之外,并阻止它
但是我需要指定一个基本的href,否则所有的链接等都将来自手机的根目录(而不是app文件夹)并中断。
有谁知道如何解决这个问题? (iOS11.1.1,iOS11.2存在问题)
答案 0 :(得分:2)
我已经使用HashLocationStrategy解决了这个问题 这将通过/#/加载url,这不会触发错误。
我改变的是:
在index.html中将基本href设置为#
<base href="#">
在app-routing.module.ts中添加了useHash选项
RouterModule.forRoot( routes, { useHash: true } ),
在app.module.ts中确保RoutingModule是导入数组中的最后一个
imports: [
...,
AppRoutingModule,
],
答案 1 :(得分:0)
如果我正确理解了WebKit的源代码(source for that error),它就会发生在您拥有的文件URI上。我找到的唯一解决方法是使用本地服务器,使其从localhost:XXX
运行,这允许替换URL