прослушиватели событий window.open не работают в Android 4.4.2

У меня есть приложение PhoneGap, которое использует InAppBrowser для загрузки входа в систему Google. Таким образом, мне нужен прослушиватель событий, который определяет, когда браузер меняет местоположение. Приведенная ниже настройка отлично работает на всех версиях 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 и снова открыв его. Я понятия не имею, почему это сработает в этом случае, но не в противном случае. Любая помощь здесь будет очень признательна.


person Sergio Prado    schedule 28.04.2014    source источник


Ответы (4)


Постоянный вызов exec заставит обрабатывать сообщения.

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

Я использую этот хак в meteor-phonegap-oauth, https://github.com/jperl/meteor-phonegap-oauth/blob/badfb932bb0b525a32c35115eb75edb8d21bbf57/patch_window.js#L20-L29

Это также решит проблему, связанную с тем, что плагины не вызывают свой обратный вызов до следующего действия плагина, например: Невозможно использовать асинхронные методы в Cordova 3.4. Onsuccess не вызывается после первого вызова метода плагина

person jonperl    schedule 20.06.2014

У вас может быть старая версия PhoneGap/Cordova, которая не очень хорошо поддерживает Android 4.4.x. В этом случае вам следует обновить PhoneGap/Cordova.

person Byte Welder    schedule 23.05.2014
comment
Спасибо за ответ! Я использую PhoneGap 3.3, поэтому не уверен, что проблема в этом. - person Sergio Prado; 24.05.2014
comment
Пожалуйста! На всякий случай можно попробовать версию 3.4. По-видимому, в нем есть многочисленные исправления для Android. (phonegap.com/blog/2014/03/04/ phonegap-3-4-release) Раньше я решал проблемы совместимости, просто обновляя. - person Byte Welder; 24.05.2014
comment
Некоторые функции Jquery также не работают в 4.4.x, но отлично работают в 4.4.x. я использую кордову 3.4.0 - person Deep Mehta; 11.06.2014

Попробуй это :

window.open("http://google.com", '__blank');
person tilak    schedule 26.05.2014

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

Я думаю, что третий параметр вышеприведенного метода — «Параметры», и есть только один вариант «местоположение» да или нет, для этого метода нет такого параметра, как «панель инструментов».

поэтому уберите лишнюю опцию после запятой, и я думаю, у вас все будет хорошо.

Вот объяснение из документации по разрыву телефона

options: параметры для InAppBrowser (строка) (необязательно, по умолчанию: «location=yes»)

Строка параметров не должна содержать пробелов, каждое имя и значение функции должны быть разделены запятой. Поддерживается только следующее значение:

> location — установите значение «да» или «нет», чтобы включить или отключить адресную строку для InAppBrowser

person Adeel Pervaiz    schedule 27.05.2014
comment
Правильно это или нет, зависит от используемой версии PhoneGap. Но ваша цитата из документации указывает на то, что их может быть более одного варианта (options, каждый) - как в их документации здесь для пример: docs.phonegap.com/en/3.1. 0/ - person Matty J; 28.05.2014