angular - iOS11 Cordova Angular 4 wrap breaking SecurityError : history. replaceState()

标签 angular cordova ios11.2 ios11.1.1

我有一个用 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/

相关文章:

ios - cordova 3.4.0 使用 paypal 插件

ios - 当我点击 UIBarButtonItem 时它会一直高亮

iOS 11.2 - 在带有大标题的导航栏内时,搜索 Controller 栏背景清晰

javascript - 如何在Javascript中的websocket请求 header 中设置cookie?

css - Javascript 文件未正确加载

javascript - 让动画在 Angular 6 组件中不起作用

iOS 11.2自定义导航栏死循环

angular - Ionic 3 - 如何使用默认属性禁用滚动而不溢出 :hidden

android - Cordova android 模拟器 - 如何使用本地主机?

android - Cordova 不是一个有效的任务