我有一个 ionic 5 Cordova 9 应用程序,需要以下行为:
- 它应该加载由跨源 Web 服务提供的图像横幅,显然是在该应用的 iframe 内。
- 图像横幅具有超链接,单击后系统浏览器应转到另一个跨源的网页。
上面的代码在 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/