3

我有一个用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 存在问题)

4

2 回答 2

4

我已经通过使用 HashLocationStrategy 解决了这个问题。
这将通过 /#/ 加载 url,不会触发错误。

我改变的是:

在 index.html 中将 base href 设置为 #

<base href="#">

在 app-routing.module.ts 添加了 useHash 选项

RouterModule.forRoot( routes, { useHash: true } ),

在 app.module.ts 确保 RoutingModule 是导入数组中的最后一个

imports: [
    ...,
    AppRoutingModule,
],
于 2018-01-28T23:05:58.210 回答
0

如果我正确理解了 WebKit 的源代码(该错误的源代码),它会发生在您拥有的文件 URI 上。我发现的唯一解决方法是使用本地服务器,以便它从 运行localhost:XXX,这确实允许替换 URL

于 2018-01-04T09:01:50.300 回答