Laxman created CB-13198:
---------------------------

             Summary: InAppBrowser doesnot disptach events after system browse 
is open.
                 Key: CB-13198
                 URL: https://issues.apache.org/jira/browse/CB-13198
             Project: Apache Cordova
          Issue Type: Bug
          Components: cordova-plugin-inappbrowser
            Reporter: Laxman


The InAppBrowser instance does not automatically dispatch the events after the 
system browser is opened via InAppBrowser. Please follow the generic code below:

{code:java}
//example 1 : bug 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');
}
//open the link in inside the iAB without
var _inAppBrowser = cordova.InAppBrowser.open(url, '_blank');
_inAppBrowser.addEventListener('loadstop', inAppBrowserEventHandler);
{code}

The _inAppBrowser instance works fine for the first time. But as soon as the 
system browser is opened, the event 'for eg. loadstop' does not fire 
automatically. This bug/issue appears only when system browser is open. for eg, 
the following code works perfectly.

{code:java}
//example 2 : no bug without 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/';

  //log the url in the console instead of browser
  console.log('open this url in the system browser ' + url)
}
//open the link in inside the iAB without
var _inAppBrowser = cordova.InAppBrowser.open(url, '_blank');
_inAppBrowser.addEventListener('loadstop', inAppBrowserEventHandler);
{code}

It seems the new '_inAppBrowserSystem' instance somehow interrupts the event 
dispatcher for the '_inAppBrowser' instance. I found that if the 
_inAppBrowserSystem is assign the same eventHandler, then _inAppBrowser starts 
to dispatch the event. The following code helped me solve the problem but this 
should still be registered as a bug. 

{code:java}
//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);
{code}

I have the solution for now, but I still register this as a bug as the event 
dispatcher is not consistent. For instance, the code in 'example 1' should work 
as in 'example 2'.  If there is not a quick fix, I hope at least the 
documentation get updated with this hack.

Thx
Laxman




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to