尽管有 CSP 和 <allow-intent>,但 Href 不工作

Href not working despite CSP and <allow-intent>

我使用 PhoneGap 制作了一个应用程序(所以我在 HTML、JavaScript 和 CSS 中编写)并且在这个应用程序中我编写了多个 "href"诸如此类的功能:

<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>

我已经在我的所有 HTML 文档中添加了一些 "Content-security-policy lines in the "head" 部分,以确保如果我 运行 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 文件中的 "widget" 部分之间添加了以下行:

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

(我知道出于安全原因不推荐使用这些线路,但这是我最后的选择) 尽管有这些行,当我用它构建 APK 并在我的 Android phone.

上 运行 时,链接仍然不起作用

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

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

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

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

cordova plugin add cordova-plugin-inappbrowser

然后添加一些代码以使用 inappbrowser 插件以 window.open 打开 link 而不是在 Webview 中打开 link 的默认行为。(以下使用 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
});