为什么 Angular 8 路由器无法在带有 WkWebView 的 Cordova IOS 中工作?

2023-11-22

我有一个现有的应用程序构建Angular8 及其代码由一个网站和 2 个移动应用程序共享Android and IOS,在帮助下捆绑Cordova。 它工作正常,但苹果公司宣布他们很快将不再支持使用UIWebView:

自 2020 年 4 月起,App Store 将不再接受使用 UIWebView 的新应用程序,自 2020 年 12 月起,将不再接受使用 UIWebView 的应用程序更新。

所以我被迫将其迁移到WkWebView。我知道有几个线程Cordova存储库和其他地方,讨论可能的迁移计划(请参阅here例如)。
我也读过this其他问题,但它很旧(Angular 的不同版本)并且没有提供任何具体的解决方案。

所以我决定去cordova-插件-wkwebview-engine插件这似乎是我的情况下最简单的解决方案。
一切都很顺利,直到我在 IOS 模拟器中启动我的应用程序并发现路由不再工作。
我设法通过路由将问题减少到尽可能小的 Angular 应用程序,您可以看到它正在工作here.
我将重现该问题所需的所有步骤都放在此中存储库.

以下步骤需要有node, npm and cordova全局安装:
1.克隆存储库:git clone https://github.com/sasensi/cordova-ios-angular.git
2.移动到存储库目录:cd cordova-ios-angular
3.安装依赖项:npm i
4.创建cordova项目:cordova create cordova com.demo.app DemoApp
5. 构建 Angular 应用程序:npm run build
6.移动到cordova目录:cd cordova
7.添加WkWebView插件:cordova plugin add cordova-plugin-wkwebview-engine
8.添加<preference name="WKWebViewOnly" value="true"/> in ./config.xml
9.添加cordova IOS平台:cordova platform add ios
10.打开platforms/ios/DemoApp.xcodeproj在 XCode (10.1) 中
11. 运行IPhone X模拟器
12.看到路由不起作用:导航部分下方没有呈现任何内容(而应该有当前页面内容)

正如存储库中提到的,使用时一切都按预期工作UIWebView(跳过步骤7. and 8.)

我希望有人已经遇到过同样的问题,并且可以帮助我使我现有的 Angular 应用程序在这个新环境中工作。


经过更深入的挖掘,这个问题与以下事实有关:WkWebView,文件被加载file://协议并且该协议不兼容Angular 位置策略.
我找到了解决方法here,其中包括使用哈希位置策略相反并设置<base>元素href属性值到document.location.
为此,您必须替换常见的<base>元素由<script>document.write('<base href="' + document.location + '" />');</script>它在运行时创建它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Angular 8 路由器无法在带有 WkWebView 的 Cordova IOS 中工作? 的相关文章

随机推荐

  • 忽略 TransactionScope 内的 SqlTransaction.Commit

    我们正在逐步用实体框架 4 3 1 替换旧的数据访问代码 在某些情况下 我们无法避免在一个工作单元中使用两种数据访问方式 理想情况下 这应该在一笔交易中完成 然而 旧代码使用SqlTransaction那个电话Commit 当一个工作单元完
  • 多对多关系中的 JPA 条件查询

    我在 EclipseLink 2 3 2 中使用 JPA 2 0 其中产品及其颜色之间存在多对多关系 一种产品可以有多种颜色 一种颜色可以与多种产品相关联 这种关系在数据库中通过三个表来表达 product prod color 连接表 c
  • 如何在 C# 中使用 AES 算法解密字符串? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有一位客户发来的加密字符串 该字符串使用 Java 中的 AES 方法加密 我唯一拥有的是密钥 xxxxxxxxxxxxxxxxxxxxxxxx 24个字符 和加密文本 56e
  • 如何在 R Windows 中将 Unicode 字符串写入文本文件?

    我已经弄清楚如何编写 Unicode 字符串 但仍然对其工作原理感到困惑 str lt Encoding str UTF 8 cat str file no iconv Written wrongly as
  • 将 List.of() 用于具有单个元素的不可变列表,而不是 Collections.singletonList()

    Java 9引入了工厂方法来创建不可变的列出与List of method 哪个更适合创建一个元素的不可变列表 List
  • DataGridView 导航到下一行

    我有一个 C winforms 应用程序 我试图让一个按钮工作 该按钮将选择 datagridview 中当前选择的行之后的下一行 到目前为止我的代码是 private void button4 Click object sender Ev
  • 谷歌互动涂鸦

    有人知道 Google 奥运互动涂鸦是如何运作的吗 http www google com doodles soccer 2012 我发现Div是hplogo 样式就在它的上方 例如 hplogo background url logos
  • Angular js:从 jQuery 访问 $scope

    stackoverflow上有好几个这样的问题 我知道 尝试了所有答案 但仍然没有运气 我的html div class headline gameContent headline div jQuery var country headli
  • MKMapView 在 iOS 8 中显示空白屏幕

    我在 iOS 8 中显示 MKMapView 时遇到问题 它在 iOS 7 中运行良好 现在也运行良好 但仅限于模拟器 在设备上 它仅显示注释 但后面不显示地图 它看起来像这样 https i stack imgur com SenGt j
  • .NET 3.5 C# 与 System.Timer System.ObjectDisposeException 的错误:无法访问已释放的对象

    在我的 Windows 服务应用程序中 我经常使用计时器 我只使用 System Timers 我以前从未遇到过这个问题 但突然我遇到了这个异常 System ObjectDisposedException Cannot access a
  • 文本框的默认值

    如何设置文本框的值 我有这个 1 文本框 我想将默认值设置为 0 这样当用户不输入任何内容时我的计算仍然可以 这可以在标记 aspx 中完成 如下所示
  • 是否有与 jQuery .has() 等效的普通 JS?

    在这个 jQuery 选择器中 相当于 has 的普通 JS 是什么 main container children analytics has a not promo Within main container 我正在尝试选择所有 ana
  • 在 QtCreator 中使用 cin

    对于学校 我们使用 C 作为首选语言 我目前正在使用 QtCreator 作为 IDE 它的 GUI 库非常棒 学校正在使用 Visual Studio 然而 我们编写的大多数程序都使用 cin 和 cout 进行输入 输出 cout 作为
  • 为什么 WCF 在作为 Web 服务托管时不能“正确”使用/公开抽象类型

    我设计 Web 服务已经有一段时间了 但直到最近才不得不公开 复杂 的 WCF 服务 我对 WCF 中明显缺乏对抽象类型的 适当支持 感到困惑 当然 你可以使用它们 当然你可以让它们 工作 你只是不会得到你想要的 第一个问题是 如果您从具有
  • Rails 推荐的添加示例数据的方式

    我有一个类似于下面的 Rake 脚本 但我想知道是否有更有效的方法来执行此操作 而不必删除数据库 运行所有迁移 重新播种数据库 然后添加示例数据 namespace db do desc Fill database with sample
  • 不符合 POSIX 的系统上 ssize_t 的替代方案

    我正在编写一个涉及网络 I O 的程序 所以send and recv使用的是 POSIX 函数 他们返回一个ssize t 这也是 POSIX 特定的 包装纸看起来像这个 ATM ssize t sock send int sock co
  • Mac 终端发送带附件的电子邮件

    我正在尝试制作一个 bash 脚本 该脚本将向所有联系人发送一封电子邮件 其中包含一条消息和一个附件 这并非出于恶意目的 我怎么能这样做呢 这可能吗 提前致谢 我之前使用 uuencode 来完成此操作 uuencode source tx
  • 如何动态添加组件到Java JScrollPane

    我正在尝试用 Java 制作 GUI 应用程序 但在 JScrollPane 中动态添加 更新组件时遇到问题 我有两个 JPanel P1 和 P2 其中 P1 有一个用于设置应用程序参数的表单 P2 包含一些 GUI 组件 这些组件根据
  • Angularjs 合并两个对象,忽略空值和缺失值

    例如 从这两个对象 var object1 color yellow size null age 7 weight null var object2 color blue size 51 age null 我想要这个 对象 2 覆盖对象 1
  • 为什么 Angular 8 路由器无法在带有 WkWebView 的 Cordova IOS 中工作?

    我有一个现有的应用程序构建Angular8 及其代码由一个网站和 2 个移动应用程序共享Android and IOS 在帮助下捆绑Cordova 它工作正常 但苹果公司宣布他们很快将不再支持使用UIWebView 自 2020 年 4 月