window.open事件侦听器在Android 4.4.2中不起作用

时间:2014-04-28 23:30:58

标签: javascript android cordova inappbrowser

我有一个使用InAppBrowser加载Google登录体验的PhoneGap应用。因此,我需要一个事件监听器来检测浏览器何时更改位置。以下设置在除4.4.2之外的所有Android版本上都能正常工作,我能说得最清楚;事件监听器触发,一切都很好。

然而,在Android 4.4.2上,我似乎无法为窗口启动任何事件监听器; loadstart,onload,onscroll等。似乎什么都没发生。不幸的是,似乎无法在Google或StackOverflow上找到任何解决方案。

不确定需要/有用的其他信息,但很乐意提供任何信息。

var auth_window = window.open(auth_url, '_blank', 'location=no,toolbar=no');

auth_window.addEventListener('loadstart', function(event) {
     alert("blah")
})

-

*** ***更新

我已经能够通过退出InAppBrowser并再次打开来启动侦听器。我不知道为什么它会在这种情况下起作用,但不是这样。这里的任何帮助将非常感谢。

4 个答案:

答案 0 :(得分:2)

不断调用exec会强制处理消息。

setInterval(function () {
    cordova.exec(null, null, '', '', [])
}, 200);

我在meteor-phonegap-oauth中使用此hack,https://github.com/jperl/meteor-phonegap-oauth/blob/badfb932bb0b525a32c35115eb75edb8d21bbf57/patch_window.js#L20-L29

这也将解决插件在下一个插件操作之前不调用其回调的问题,例如:Cannot use asynchronous methods in Cordova 3.4. Onsuccess is not called after the first call of plugin method

答案 1 :(得分:0)

你可能有一个旧的PhoneGap / Cordova版本,它不能很好地支持Android 4.4.x. 在这种情况下,您应该更新PhoneGap / Cordova。

答案 2 :(得分:0)

试试这个:

window.open("http://google.com", '__blank');

答案 3 :(得分:0)

var auth_window = window.open(auth_url, '_blank', 'location=no,toolbar=no');

我认为上述方法的第三个参数是选项,并且只有一个选项是" location"是或否,没有像"工具栏"对于这种方法。

所以删除逗号之后的额外选项,我想你会没事的。

来自手机间隙文档的解释

  

选项:InAppBrowser(String)的选项(可选,默认值:   "位置= YES&#34)

     

选项字符串不得包含任何空格,每个要素名称   和值必须用逗号分隔。只有下面的值是   支持:

     

<强>&GT;位置 - 设置为“是”&#39;或者没有&#39;打开或关闭位置栏   InAppBrowser