Phonegap window.open在Android上不起作用

时间:2013-05-02 17:55:41

标签: android cordova

我有一个基于cordova 2.6和jqm 1.3构建的iOS / Android应用程序。我需要在用户点击按钮后打开指向外部网站的链接。我正在使用的代码是:

var ref = window.open('http://google.com','_self','location=yes');
ref.addEventListener('loadstart',function(event) {
    console.log('load started');
});
ref.addEventListener('loadstop',function(event) {    
    console.log('load stopped');
});
ref.addEventListener('loaderror',function(event) {
    console.log('load error = ' + JSON.stringify(event));
});

在iOS上,一切都像我期望的那样表现。将打开一个新的浏览器窗口,其中加载了Google网站。但我无法在Android中加载任何东西。当我点击按钮时,没有任何反应。我在window.open之前和之后放入了控制台语句,所以我知道代码至少被执行了。

对于白名单网站,我的config.xml应该是敞开的:

<access origin=".*"/>;

我已经在Nexus 7(android 4.2)和Android 2.2模拟器上进行了测试,结果相同。

有谁知道为什么window.open不会在android上正确触发?

2 个答案:

答案 0 :(得分:1)

看起来在Android上加载2.6插件是一个问题。我升级到2.7,一切都开始工作了。

答案 1 :(得分:0)

也许这是使用ChildBrowser plugin的解决方案?这使您可以更好地控制操作本身,同时仍然保留iOS和Android之间的平台兼容性。

在大多数情况下,我使用类似以下代码段的内容来使用childbrowser来显示外部页面。

function openBrowser(url) {

    // determine if the childbrowser plugin is available
    var useChildBrowser = ('plugins' in window && window.plugins.childBrowser);

    if (useChildBrowser) {
        popup = window.plugins.childBrowser;
        popup.showWebPage(url, { showLocationBar: false, showAddress: false });
    } else {
        popup = window.open(url, 'Share', "['width=600px', 'height=400px', 'resizable=0', 'fullscreen=yes']"); 
    }
}

请注意,如果ChildBrowser插件不可用,则会回退到使用window.open,因此您不会破坏其他任何内容。或许值得一试?