Apache Cordova允许导航被allow-intent

时间:2016-05-10 13:17:59

标签: android ios cordova whitelist apache-cordova

我们希望应用程序上的每个链接都能够在系统的外部浏览器中打开,但选择的主机名除外。

我们尝试添加<allow-navigation href="*.hostname.com/*"/>,但是当您使用<allow-intent href="http://*/*" /> and <allow-intent href="https://*/*"作为应用中所有其他链接的intent标记时,会覆盖此内容。

预期的结果是我们的主机名在应用程序中打开,但它们在外部浏览器上打开。

我已经尝试查看网上提供的所有最新文档和帮助,但无法找到我的解决方案的答案。希望你们知道。

编辑:忘了提及我们使用inappbrowser插件运行最新的cordova CLI和最新的白名单插件。

此致

丹尼尔

2 个答案:

答案 0 :(得分:1)

尝试更改<allow-*&gt;标签:

<allow-intent href="*.hostname.com/*"
<allow-navigation href="https://*/*"
<allow-navigation href="http://*/*"
<allow-access href="https://*/*"
<allow-access href="http://*/*"

<allow-navigation>标记用于控制可以导航到Cordova webview本身的网址。

请查看此article以更好地了解Cordova的白名单。

答案 1 :(得分:0)

我认为你需要手动完成。您可以使用inApp Browser插件来实现此目的。

  1. 检查链接是内部/外部的(通过检查超链接是否包含您的主机名)
  2. 如果是外部呼叫系统的浏览器并打开链接 cordova.InAppBrowser.open('http://external-domain.name', '_system', 'location=yes');
  3. 如果是内部打开InAppBrowser内的链接 cordova.InAppBrowser.open('http://yourdomain.name', '_blank', 'location=yes');
  4. 如果您不需要,可以忽略第3步。

    完整代码:

    $(document).on("click","a",function(e){        
          var hrefs = $(this).attr("href");        
    
          if(hrefs.indexOf("yourdomain") > -1) {
              //Open link inside inAppBrowser   
              cordova.InAppBrowser.open(hrefs, '_blank', 'location=yes');
              e.preventDefault();//To prevent default click
           } 
          else {
               //Open link inside system browser
               cordova.InAppBrowser.open(hrefs, '_system', 'location=yes');
               e.preventDefault();//To prevent default click
           }
    })