2013-05-02 67 views
2

我有一个基于cordova 2.6和jqm 1.3构建的iOS/Android应用程序。我需要在用户点击一个按钮后打开一个到外部网站的链接。我正在使用的代码是:Phonegap window.open不适用于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上,一切都像我所期望的那样执行。随着谷歌网站的加载,一个新的浏览器窗口打开。但我无法在Android中加载任何内容。当我点击按钮时,没有任何反应。我已经在window.open之前和之后放置了控制台语句,所以我知道代码至少正在执行。

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

<access origin=".*"/>; 

我已经在Nexus 7(安卓4.2)和Android 2.2的模拟器上都相同的结果进行测试。

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

+0

您的config.xml文件中列出了InAppBrowser插件吗?你在AndroidManifest.xml中有互联网权限吗? – MBillau 2013-05-02 19:03:21

+0

两者都在那里。我刚刚使用了创建新phonegap项目时创建的基本清单。 '<使用权限android:name =“android.permission.INTERNET”/>'是在我的清单和'<插件名称=“InAppBrowser”value =“org.apache.cordova.InAppBrowser”/>'是在我的配置.xml – whynotmatt 2013-05-02 19:56:05

+0

我刚刚在我的Nexus 7(4.2)上尝试过使用相同的设置,但没有问题...但是,我没有使用jqm ...也许这可能是个问题?如果你只是用香草JavaScript启动该功能,它是否工作?你确实说过,你正在获取console()消息,但是......我假设在日志中没有任何内容? – MBillau 2013-05-02 20:05:45

回答

1

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

+0

谢谢你。这确实是一个浪费我太多时间的phonegap bug。 – nubela 2013-06-04 19:31:40

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

注意,这回退到使用window.open如果ChildBrowser插件不可用,所以你不会打破任何其他与此有关。也许值得一试?

+0

我真的与ChildBrowser混了几个小时,但遇到了基本相同的问题。那时候我意识到window.open是2.6核心功能的一部分,所以我决定取消ChildBrowser。 – whynotmatt 2013-05-02 19:15:17

相关问题