我想要什么
我有外部网络资源,我希望cordova网络视图能够简单地打开,并能够在其内部导航中导航。
描述
InAppBrowser文档称
InAppBrowser窗口的行为类似于标准web浏览器,不能访问Cordova API。因此,建议使用InAppBrowser如果需要加载第三方(不受信任的)内容,请而不是将其加载到Cordova主网络视图
所以我有一个值得信赖的外部链接(比如http://www.google.com我想在主web视图中加载,并希望通过window.location.htm或用户链接单击来控制其进程。
我尝试了什么
使用最新的cordova生成helloworld应用程序并插入
window.location.href = 'http://www.google.com/'
到其onDeviceReady。它的配置已经有了(我试图将其更改为具体地址)
<access origin="*" />
我也尝试了window.open和手动用户点击链接,但我所得到的只是在外部浏览器中打开链接的对话框,而不是在同一个网络视图中呈现它。我还尝试了InAppBrowser扩展,当我禁用导航栏时,它可以很好地工作,但它存在通信问题,并且在手动链接点击和window.location.href更改时不起作用。
在ios和android上使用以下规则解决了此问题:
<access origin="*" />
<allow-navigation href="*" />
<allow-navigation href="http://*/*" />
<allow-navigation href="https://*/*" />
<allow-navigation href="tel:*" />
<allow-navigation href="sms:*" />
<allow-navigation href="mailto:*" />
<allow-navigation href="geo:*" />
若你们遇到同样的问题,你们还需要知道以下内容:
- 当文档对当前版本并不总是正确时,多个cordova版本具有不同的规则结构和行为。在我的研究中,我发现这篇文章非常有用https://github.com/jessemonroy650/top-phonegap-mistakes/blob/master/whitelist-matrix.md
- 我的主要问题是"不知道"允许意图覆盖允许导航。确保您了解它的工作原理
如何将www.example.com加载到Cordova WebView
<allow-navigation href="https://example.com/*" />
<allow-navigation href="*://*.example.com/*" />
更多信息:
AFAIK,默认情况下Cordova不允许在WebView上加载外部链接。但是,您仍然可以显示存储在项目中的内部html页面(例如index.html等)。这是一种安全措施。
因此,您需要安装此插件cordova插件白名单,并手动将您的应用程序要加载到cordova WebView上的域列入白名单。
如果要允许在WebView中加载所有链接,可以使用<allow-navigation href="*" />
,但不建议使用。
相关链接:
官方Github链接