ios - 在 Ionic Cordova 应用程序中,iframe 中的跨源内容中的外部超链接可在 Android 上运行,但在 iOS 上不起作用

标签 ios cordova ionic-framework iframe whitelist

我有一个 ionic 5 Cordova 9 应用程序,需要以下行为:

  1. 它应该加载由跨源 Web 服务提供的图像横幅,显然是在该应用的 iframe 内。
  2. 图像横幅具有超链接,单击后系统浏览器应转到另一个跨源的网页。

上面的代码在 Android 上运行得很好,config.xml 和 index.html 由 ionic 和 Cordova CLI 自动生成。当我将代码移植到 iOS 时,我必须对 config.xml 和 index.html 进行更改才能获取 iframe 中的内容: 更改后,Config.xml 有这些相关条目

<access origin="*" />
<allow-navigation href="*" />
<allow-intent href="*" />

我将以下内容添加到index.html

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; child-src *">

经过上述更改后,我在 iframe 中获得了横幅,但是当我单击横幅时没有任何反应。 Safari 显示没有生成网络请求。 如前所述,我无法控制 iframe 的内容,因此我无法使用 InAppBrowser 或类似的解决方案。

我还尝试卸载 cordova-plugin-whitelist,因为 iOS 上不需要,但这没有任何区别。 现在我并不担心加强安全措施。我想先让它发挥作用。我研究了 Cordova 白名单指南并浏览了 Stack Overflow 上的每个相关问题,但没有找到任何解决方案。我请求专家指导。

最佳答案

除了iframe中的超链接之外,我还直接在页面上创建了一个超链接。经过几次观察,我可以隔离 <allow-navigation>作为 config.xml 的标签,这对这个问题产生了影响。

当我删除<allow-navigation href="*" />时标签来自config.xml ,页面上的超链接有效,但 iframe 内容未填充。

当我带回来<allow-navigation href="*" />时标签,iframe 现已填充,但来自页面和 iframe 的超链接不起作用。

这暗示我需要中间的东西。

然后我将标签更改为 <allow-navigation href="*://*.iframeContentDomain.com/*" />并且恢复了 iframe 内容以及来自页面和 iframe 的工作超链接。

关于ios - 在 Ionic Cordova 应用程序中,iframe 中的跨源内容中的外部超链接可在 Android 上运行,但在 iOS 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58744205/

相关文章:

ios - 如何在 ionic 中增加 IOS 设备的启动画面时间

android - 如何在 ionic +react + capacitor 项目中设置最低 android 版本支持?

android - Ionic 应用程序适用于 ios,但不适用于 android

ios - 在 objective-c 中存储具有值的任何类型的常量

ios - NSDateFormatter 没有显示完整的月份名称,只有一位数字

iOS 键盘扩展以 "per-process-limit"终止

android - 带有 Phonegap 和 AngularJS 的 HTML5 模式

javascript - 如何在 JavaScript 中匹配两个图像?

cordova - 如何调试Ionic中使用的Sqlite数据库?

ios - 从 iOS 上的音乐库中获取所有歌曲