Cordova InAppBrowser - обратные вызовы событий, не вызываемые после открытия системного браузера ("_system") - PullRequest
0 голосов
/ 27 августа 2018

В нашем приложении Cordova мы используем InAppBrowser (не так ли?) Для запуска нашего локального веб-приложения.Иногда нам нужно открывать браузер устройства (Chrome / Safari) для обработки внешних ссылок.

Когда мы возвращаемся из браузера устройства, кажется, что плагин InAppBrowser прекращает запуск событий ('loadstop', 'loadstart',так далее...).Мы попытались перерегистрировать события, но, похоже, это не сработало.

Кто-нибудь знает почему?

Here Be Tech Info

Мы открываем наш локальныйwebapp обычным способом:

ref = cordova.InAppBrowser.open(url, 'blank', options);

Не удивительно и при регистрации обратных вызовов событий:

ref.addEventListener('loadstop', onLoadStop);
ref.addEventListener('loadstart', onLoadStart);
ref.addEventListener('loaderror', onLoadError);
ref.addEventListener('exit', onExit);

Мы попытались открыть внешний веб-браузер, используя window:

window.open(event.url, '_system');

Или с использованием второго InAppBrowser:

var browser = new cordova.InAppBrowser.open(event.url,'_system');

Мы используем InAppBrowser v3.0.0.Это происходит как на Android, так и на iOS.

1 Ответ

0 голосов
/ 27 августа 2018

По-видимому, это известная проблема с InAppBrowser : открытие системного браузера приводит к сбоям в работе диспетчера событий.

Официальное решение - зарегистрировать те же обратные вызовы событий в новом InAppBrowser.Поскольку InAppBrowser вообще не вызывает события для системного браузера , вам не нужно беспокоиться о срабатывании двойных обратных вызовов.Это решение восстанавливает обработку событий в старом (локальном веб-приложении) InAppBrowser.

Пример из официального выпуска:

//example 3 : hack/solution with cordova.InAppBrowser.open(url, '_system');
//event hander for inAppBrowser
function inAppBrowserEventHandler(event){
  //process few logic with the event parameter
  //and if conditions met lets open it on system browser
  var url = 'https://cordova.apache.org/';

  //open the url in system browser
  var _inAppBrowserSystem = cordova.InAppBrowser.open(url, '_system');

   //for somereason, after assigning the same event handler to the _inAppBrowserSystem, the event dispatcher continues to work
  _inAppBrowserSystem.addEventListener('loadstop', inAppBrowserEventHandler);
}
//open the link in inside the iAB without
var _inAppBrowser = cordova.InAppBrowser.open(url, '_blank');
_inAppBrowser.addEventListener('loadstop', inAppBrowserEventHandler);
...