我有一个用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="./">
从外观上看,它在url上做了一个字符串比较,并认为我试图访问沙箱区域以外的区域,并阻止它。
不过,我确实需要一个基本的href被指定,否则所有的链接等将基于手机的根(而不是应用文件夹)和中断。
有人知道怎么解决这个问题吗?
( iOS11.1.1、iOS11.2有问题)
发布于 2018-01-28 23:05:58
我用HashLocationStrategy解决了这个问题。
这将通过/#/加载url,这不会触发错误。
我改变的是:
在index.html集合中,基href到#
<base href="#">在app-routing.module.ts中添加了useHash选项
RouterModule.forRoot( routes, { useHash: true } ),在app.module.ts中,确保RoutingModule是导入数组中的最后一个
imports: [
...,
AppRoutingModule,
],发布于 2018-01-04 09:01:50
如果我正确地理解了WebKit (该错误的源)的源代码,它就会发生在您拥有的文件URI上。我找到的唯一解决办法是使用本地服务器,这样它就可以从localhost:XXX运行,这就允许替换URL
https://stackoverflow.com/questions/47805178
复制相似问题