Android 4.4.2中window.open事件监听器无法正常工作

9
我有一个使用InAppBrowser加载Google登录体验的PhoneGap应用程序。 因此,我需要一个事件侦听器来检测浏览器何时更改位置。 以下设置在所有Android版本上都可以正常工作,除了最好我能告诉你的Android 4.4.2; 事件侦听器会触发,一切都很好。
然而,在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个回答

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

0
尝试这个:
window.open("http://google.com", '__blank');

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

我认为上面方法的第三个参数是选项(Options),并且只有一个选项叫做“location”,可以设置为“yes”或“no”,没有像“toolbar”这样的选项。

因此,请删除逗号后面的额外选项,我想你就没问题了。

以下是PhoneGap文档中的解释:

options: InAppBrowser 的选项(字符串)(可选,默认值:“location=yes”)

选项字符串不能包含任何空格,每个功能名称和值之间必须用逗号分隔。仅支持以下值:

> location - 设置为“yes”或“no”以打开或关闭InAppBrowser的位置栏


这是否正确取决于所使用的PhoneGap版本。但是,您从文档中引用的语句表明可能会有多个选项(选项,每个)-例如,在此处的他们的文档中:http://docs.phonegap.com/en/3.1.0/cordova_inappbrowser_inappbrowser.md.html#window.open - Matty J

0

你可能使用的是旧版的PhoneGap/Cordova,不太支持Android 4.4.x系统。 这种情况下,你应该更新PhoneGap/Cordova。


谢谢回复!我正在运行PhoneGap 3.3,所以我不确定那是否是问题。 - Sergio Prado
不客气!你可能想尝试一下版本3.4——以防万一。它显然有许多Android修复程序。(http://phonegap.com/blog/2014/03/04/phonegap-3-4-release/) 我之前只是通过升级解决了兼容性问题。 - ByteWelder
一些Jquery函数在4.4.x上也无法正常工作,但在4.4.x下可以正常工作。我正在使用cordova 3.4.0。 - Deep Mehta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接