我有一个正在为Android和iOS编译的cordova项目。我有一些链接在系统浏览器中打开一个网站,例如:
window.open('https://example.com', '_system');
cordova.InAppBrowser.open('httos://example.com', '_system');
这在Android上运行良好,但在iOS上没有任何反应,甚至没有'_blank'。
我也尝试过像其他人推荐的那样添加inappbrowser插件(https://github.com/apache/cordova-plugin-inappbrowser),但是当我实现它时没有任何改变。
有关如何在iOS上的系统浏览器中打开链接的任何想法?谷歌上的每个消息来源都只是说添加inappbrowser插件,或者只是使用'_system'(但这就是我一直在做的!)。
我不认为这是我的白名单问题,因为它在Android上工作正常,我的应用程序也可以在iOS上从互联网上加载资源。一切都有效,除了在iOS上打开链接。
更新:调用cordova.InAppBrowser.open()在从onDeviceReady事件调用时起作用,但在事件之外不起作用。我甚至试过设置window.open,但那不起作用。
答案 0 :(得分:0)
在一些论坛上进行了一些无情的挖掘之后,我在离子论坛上发现了这篇文章:https://forum.ionicframework.com/t/cordova-inappbrowser-plugin-stopped-working-in-ios-10/64361/9
将我的内容安全政策更改为:
<meta http-equiv="Content-Security-Policy" content="img-src * 'self' data:; default-src * 'self' gap: wss: ws: ; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval';">
有效!然而,我想更好地理解为什么这个CSP的工作方式与通常建议的每个人都说要使用的“gap:// ready”相反。
答案 1 :(得分:0)
最后通过将首选项设置为iOS来解决此问题 在config.xml中
preference name="WKPort" value="8080"
preference name="UseScheme" value="false"
专门为iOS设置这些首选项。
UseScheme = false确实是一个坏主意,但它是当今解决此问题的唯一方法。