尽管有CSP和<allow-intent>

时间:2017-01-17 15:39:08

标签: android html cordova phonegap-build content-security-policy

我使用PhoneGap创建了一个应用程序(所以我用HTML,JavaScript和CSS编写),在这个应用程序中,我写了多个&#34; href&#34;这些功能:

<a href="mailto:marcel.loman@apt-alu-products.com">
marcel.loman@apt-alu-products.com </a><br />

Website: <a href="http://www.apt-alu-products.com">www.apt-alu-products.com</a></p>

我在&#34; head&#34;中添加了一些&#34; Content-security-policy行。我的所有HTML文档的一部分,以确保它在Android上运行apk时可以工作。这个CSP看起来像这样:

<meta http-equiv="Content-Security-Policy" 
         content="default-src *; 
                  style-src * 'self' 'unsafe-inline' 'unsafe-eval'; 
                  script-src * 'self' 'unsafe-inline' 'unsafe-eval';">

最重要的是,我在我的config.xml文件中添加了以下几行&#34; widget&#34;部分:

<allow-intent href="http://*/" />
<allow-intent href="https://*/*" />
<allow-intent href="mailto:*" />
<allow-navigation href="*" />
<allow-intent href="*" />
<access origin="*" />

(我知道由于安全原因,不建议使用这些行,但这些是我最后的手段) 尽管有这些线路,当我从中构建一个APK并在我的Android手机上运行时,这些链接仍然不起作用。

互联网上有很多关于这个主题的文章,但我读过的文章都没有能够解决我的问题。

1 个答案:

答案 0 :(得分:0)

在没有inappbrowser插件的情况下将这些链接直接添加到应用的HTML中将无效。 http链接实际上会将内容加载到您的Webview中,替换您的应用代码。

我假设您希望mailto链接启动默认邮件客户端,并在系统浏览器中打开http链接?假设这样做,请执行以下操作:

首先,将inappbrowser插件添加到项目中:

cordova plugin add cordova-plugin-inappbrowser

然后添加一些代码以使用inappbrowser插件打开带有window.open的链接,而不是在Webview中打开链接的默认行为。(以下使用jQuery):

$(document).on('click', 'a[href^=http], a[href^=mailto]', function(e){
    e.preventDefault(); // prevent Webview from following link
    window.open($(this).attr('href'), '_system'); // Open with inappbrowser
});