2016-06-06 2 views
2

Nous développons actuellement une application avec cordova et le plugin InAppBrowser. Nous essayons de générer deux instances IAB différentes en même temps. Une avec le navigateur _system et une autre avec l'option _blank. Le problème que nous avons est que, une fois que nous ouvrons l'instance de _system browser, il semble que nous perdions la référence au navigateur précédent. Pour cette raison, l'événement close ne se déclenche jamais sur l'IAB _blank après la fermeture du navigateur _system.L'ouverture de deux instances d'InAppBrowser (_system et _blank) empêche le déclenchement des événements

Voici à quoi ressemble le code actuel. Comme vous pouvez le voir, nous ouvrons la première URL dans l'application avec l'option _blank. Ensuite, si dans l'application enfant un bouton est pressé, nous voulons ouvrir une instance d'un navigateur dans le navigateur _system.

Nous avons essayé (sans succès) à:

ont une référence distincte pour le navigateur _SYSTEM.

window.open(global.url_ficha + customerId, '_system','location=no'); 
var cardsRef = window.open(
    'https://www.test.example.url.com?customerID=' + customerId, 
    '_system', 
    'location=yes' 
);   

Trigger un événement personnalisé en dehors de la référence du navigateur _blank

if (event.url.match('openccard')) { 
    var customerId = event.url.split('openccard-')[1]; 
    var evt = document.createEvent("Event"); 
    evt.initEvent("openccard",true,true); 
    evt.customerId = customerId; 
    document.dispatchEvent(evt); 
} 

Quelqu'un a une idée de ce qui se passe?

Répondre

3

Il semble que vous ayez besoin d'initialiser l'IAB chaque fois que vous faites une nouvelle window.open() si vous ne le faites pas, les écouteurs d'événements ne fonctionnent pas. Si j'utilise ce code, il fonctionne comme un charme.

window.openIAB = function(url, target, options) { 

    var self = this; 
    var ref = window.open(url, target, options); 

    var handleChildEvents = function(ev) { 

     if (ref != undefined) { 

      // Closing the iab window 
      if (ev.url.match('#close')) { 
       ref.close(); 
       ref = undefined; 
      } 

      // Opening card url with system browser 
      if (ev.url.match('#openccard')) { 
       var customerId = ev.url.split('#openccard-')[1]; 
       self.ref2 = self.openIAB(
        'https://www.test.com?customerID=' + customerId, 
        '_system', 
        'location=yes' 
       ); 
      } 

     } else { 
      console.log('InAppBrowser has no reference'); 
     } 

    }; 

    ref.addEventListener('loadstart', handleChildEvents); 
    ref.addEventListener('loadstop', handleChildEvents); 

    ref.addEventListener('loaderror', function(ev) { 
     console.log('error while loading page'); 
     ref.close(); 
     ref = undefined; 
    }); 

    ref.addEventListener('exit', function(ev) { 
     dialog.close(); 
    }); 

    return ref; 
}; 
+0

J'ai signalé ce bug à Apache. https://issues.apache.org/jira/browse/CB-13198 J'espère qu'ils ont au moins mis à jour leur documentation. – Laxman