【问题标题】:phonegap - open link in browserphonegap - 在浏览器中打开链接
【发布时间】:2012-12-28 14:17:02
【问题描述】:

我使用 phonegap (cordova 2.2)

我有这样的链接:

<a href="http://twitter.com/foobar" target="_blank">twitter</a>

在 iOS 上 - 它会在浏览器 (Safari) 中打开链接

但在 Android 上 - 它在 webview 中打开(在我的 phonegap 应用程序中)

有没有办法让 Android 和 iOS 一样工作?

【问题讨论】:

    标签: cordova cordova-2.0.0


    【解决方案1】:

    这就是我在 Android 上使用 Cordova 2.2 和 jQuery mobile 的方式

    Javascript:

    $('.link').live('tap', function() {
        url = $(this).attr("rel");   
        loadURL(url);
    });
    
    function loadURL(url){
        navigator.app.loadUrl(url, { openExternal:true });
        return false;
    } 
    

    html:

    <a href='#' class='link' rel='http://www.someurl.com'>Go Somewhere</a>
    

    【讨论】:

    • 很高兴知道这一点.. 这对我使用 Cordova 2.3,Android 上的 jQuery Mobile 有效。
    • Live 已被弃用。见鬼,我以为它在更新的 JQ 版本中被删除了。我会使用委托或 on 方法但委托样式。实际上,delegate 也是如此,不过是最近才出现的。
    【解决方案2】:

    在安卓上试试这个:

    function loadURL(url){
        navigator.app.loadUrl(url, { openExternal:true });
        return false;
    } 
    

    HTML:

    <a click="loadURL('http://twitter.com/foobar')">twitter</a>
    

    你也可以在你的config.xml试试这个:

    <access origin="*twitter.com" browserOnly="true"/> 
    

    【讨论】:

    • 使用 onclick 而不是 click 为我工作。属性点击不存在,还是存在?
    【解决方案3】:

    user1879822提供的链接其实对我来说是最有用的:https://build.phonegap.com/blog/access-tags

    总而言之,PhoneGap 在其 config.xml 中有一个允许 URL 的白名单。这意味着如果它有这样的条目......

    <access origin="*" />
    

    ...它将尝试在其自己的 web 视图中打开 所有 链接。但是,如果您将白名单限制为仅特定的 URL,则任何指向该列表中 not 的 URL 的链接都将自动在外部浏览器中打开,而不是在本地 Web 视图中打开。例如,如果您将其限制为仅此 ...

    <access origin="http://127.0.0.1*" />
    

    ...那么原始问题中提到的 twitter 链接应该在新的外部浏览器中打开。

    【讨论】:

      【解决方案4】:

      如果要在ios版本中使用as,带有target="_blank"属性:

      $(document).on('tap', 'a[target="_blank"]', function(e){
          navigator.app.loadUrl(e.target.href, { openExternal: true });
          return false;
      });
      

      【讨论】:

        【解决方案5】:

        即使之前有人问过这个问题,我还是想告诉您以下帮助我的血腥条目:

        https://build.phonegap.com/blog/access-tags

        在 android 中,我所要做的就是取消我指定的域的白名单。所以在我的 config.xml 中我根本没有任何 `。

        【讨论】:

          【解决方案6】:

          我将此作为一般规则:

          $('a').live('tap',function(e){
              // if external link then open a browser
              if(String($(this).attr('href')).substring(0,4)=='http' || String($(this).attr('href')).substring(0,5)=='https'){
                  navigator.app.loadUrl($(this).attr('href'), { openExternal:true });
                  e.stopPropagation();
                  return false;
              }
          });
          

          【讨论】:

          • 仅供参考,您的 https 比较是多余的,它总是在第一个表达式中计算为 true。 :)
          • 其实就是检测是否是外链。但是,是的,你是对的。 :)
          【解决方案7】:

          我遇到了同样的问题,我注意到大多数答案在不同的平台上都混在一起了。适合我的解决方案是Detail Explanation for different platforms

          【讨论】:

          • 请编辑您的答案,以便在此处提供所有相关文本,并提供链接作为更详细的备份信息。即使链接变得无效,这也使答案有用
          【解决方案8】:

          这在 ios 上对我有用

                              $("a[target='_blank']").on('tap touch click',function(e){
                                  e.stopPropagation();
                                  e.preventDefault();
                                  window.open($(this).attr('href'), "_system");
                                  return false;
                              });
          

          【讨论】:

            【解决方案9】:

            phonegap 的导航器工作!

            handler: function (btn, evt) {
            loadURL('http://www.google.com');
            }
            

            ...

            function loadURL(url){
            navigator.app.loadUrl(url, { openExternal:true });
            return false;
            } 
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-04-24
              • 1970-01-01
              • 2012-02-21
              • 2016-10-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多