Cordova InAppBrowser - Обратните извиквания на събития не се извикват след отваряне на системния браузър (_system)

В нашето приложение Cordova ние използваме InAppBrowser (нали не всички?), за да стартираме нашето локално уеб приложение. Понякога трябва да отворим браузъра на устройството (Chrome / Safari), за да обработваме външни връзки.

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

Някой знае ли защо?

Ето техническа информация

Отваряме нашето локално уеб приложение по обичайния начин:

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.


person Vaiden    schedule 27.08.2018    source източник


Отговори (1)


Очевидно това е известен проблем с 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);
person Vaiden    schedule 27.08.2018