2

我有一个基于 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 上正确触发?

4

2 回答 2

1

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

于 2013-05-03T15:51:14.690 回答
0

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

在大多数情况下,我使用类似下面的代码片段来使用子浏览器来显示外部页面。

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']"); 
    }
}

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

于 2013-05-02T19:13:17.767 回答