PhoneGap - 在浏览器中打开链接

14

我使用 PhoneGap(Cordova 2.2)

我有如下链接:

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

iOS系统中打开链接会在浏览器(Safari)中打开。

但是在Android系统中,它会在webview内(我的phonegap应用程序内)打开。

有没有办法让Android的打开方式与iOS相同?

9个回答

27

这是我在安卓上使用 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>

1
很高兴知道这个.. 在使用Cordova 2.3、jQuery Mobile在Android上对我奏效。 - Mahendra Liya
Live已被弃用。我以为它在更近的JQ版本中被删除了。我会使用委托或on方法,但是委托样式。实际上,delegate也是如此,但最近得多。 - Erik Reppen

6

针对Android,可以尝试以下操作:

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对我有效。click属性不存在,或者存在吗? - Luis Chanferoni

4
用户user1879822提供的链接实际上对我来说最有用:https://build.phonegap.com/blog/access-tags 总结一下,PhoneGap在其config.xml中拥有允许URL的白名单。这意味着如果它有像这样的条目...
<access origin="*" />

如果你将白名单限制在特定的URL上,那么WebView将尝试打开其内部的所有链接。但是,如果您将白名单限制为仅限特定的URL,则任何指向不在该列表中的URL的链接都将自动在外部浏览器中打开,而不是在本地WebView内部打开。例如,如果您将其限制为仅限于此...

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

如果是这样,那么原问题中提到的 Twitter 链接应该在一个新的外部浏览器中打开。


3

如果你想在iOS版本中使用,需要添加 target="_blank" 属性:

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

1
我遇到了完全相同的问题,注意到大多数答案混淆了不同的平台。对我有效的解决方案是不同平台的详细说明

请编辑您的答案,以便提供所有相关文本,并提供链接作为更详细的备份信息。这样即使该链接失效,答案也仍然有用。 - Anthon

1
即使这个问题已经被问了一段时间,我仍想向您介绍以下博客条目,它帮助了我解决问题:

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

在Android中,我只需要取消指定域名的白名单即可。因此,在我的config.xml文件中,我根本没有任何`。

1
我把这个作为一般规则使用:

$('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。 :) - Luke Dennis
实际上,它的作用是检测它是否为外部链接。但是,没错,你说得对。 :) - thedjaney

0

这个在我的iOS设备上有效

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

0

PhoneGap 的导航器正常工作!

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

...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接