我有一个网络应用程序,它有一个嵌入式地图字段,它是使用 iframe 实现的https://maps.google.com/ https://maps.google.com/...
我正在将我们的应用程序(当前作为主屏幕图标运行)移植到 iOS 上的 Cordova,因此添加了 Cordova 包装器。我们已经通过 Cordova 在 Android 上运行该应用程序。
我有一个div
,有一个子元素
<iframe src="https://maps.google.com/?iwloc=&output=embed&q=something"></iframe>
最初,当 Cordova 项目只关注 Android 时,我曾config.xml
<access origin="*" />
<access origin="file://*" />
<access origin="http://*" />
<allow-navigation href="http://*" />
然而,这是行不通的。这iframe
地图 url 甚至不会尝试加载,并且没有任何迹象表明原因。
所以我开始阅读并尝试这些设置,基本上在 iOS 上,它们所做的就是映射到NSAppTransportSecurity
设置在Info.plist
.
事实证明<allow-navigation href="http://*" />
被完全忽略,仅支持指定域或仅支持 * 的允许导航,因此我尝试了更具体的基于域的导航,例如
<allow-navigation href="http://maps.google.com/*" />
这会创建一个域条目maps.google.com
和集NSExceptionAllowsInsecureHTTPLoads
to true
但 iframe 仍然无法加载。
我能找到的唯一允许 iframe 加载地图 URL 的方法是添加
<allow-navigation href="*"/>
这基本上设置了NSAllowsArbitraryLoads
to true
这基本上会关闭 TLS,并会触发应用程序审核并需要理由。
边注:<access origin="*"/>
还设置NSAllowsArbitraryLoads
to true
但单独阻止初始 URL 加载到 webview 内部(它从外部加载)。
我对 config.xml 或 config.xml 的组合有点不知所措NSAppTransportSecurity
设置我需要让它工作,而不仅仅是允许一切和应用程序审查问题,这无疑会触发。
注意:这些请求不会触发 CSP 警告,我认为 webview 甚至没有达到那么远,如果我将allow-navigation 设置为 * 它可以工作,这表明 CSP 没问题。
当它失败时,我在 Web 调试器中针对该请求得到的只是“尝试加载资源时发生错误”,而 XCode 控制台中没有任何内容。