我有一个基于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上正确触发?
答案 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
,因此您不会破坏其他任何内容。或许值得一试?