2016-06-06 3 views
2

В настоящее время мы разрабатываем приложение с кордорой и плагином InAppBrowser. Мы пытаемся одновременно создавать два разных экземпляра IAB. Один с браузером _system, а другой с опцией _blank.Открытие двух экземпляров InAppBrowser (_system и _blank) предотвращает запуск событий

Проблема заключается в том, что как только мы открываем экземпляр браузера _system, похоже, мы теряем ссылку на предыдущий браузер. По этой причине событие закрытия никогда не запускается на _blank IAB после закрытия браузера системы.

Вот как выглядит код.

// Opening iab main window 
var ref = window.open(global.chat_mediador, '_blank','location=no,toolbar=yes'); 

var handleEvents = function(event) { 

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

    // Trigger custom event 
    if (event.url.match('#openccard')) { 
     window.open('https://www.test.example.url.com?customerID=' + event.customerId, '_system', 'location=yes'); 
    } 

} 

// InAppBrowser events 

// This events are duplicated because loadstop works on android and 
// loadstart works on ios. 
ref.addEventListener('loadstart', handleEvents, false); 
ref.addEventListener('loadstop', handleEvents, false); 

// Removing the dialog when we close the chat 
ref.addEventListener('exit', function(event) { 
    generali.dialog.close(); 
}, false); 

Как вы можете видеть, мы открываем первый URL-адрес приложения с помощью опции _blank. Затем, если в дочернем приложении нажата кнопка, мы хотим открыть экземпляр браузера в обозревателе _system.

Мы пытались (безуспешно), чтобы:

имеют отдельную ссылку для _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 пользовательского события вне ведения _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); 
} 

Любой имеет представление о том, что происходит?

ответ

3

Кажется, что вы должны инициализировать IAB каждый раз, когда вы делаете новое окно.open(), если вы этого не сделаете, что прослушиватели событий не работают.

Если я использую этот код, он работает как шарм.

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

Я сообщил об этой ошибке apache. https://issues.apache.org/jira/browse/CB-13198 Надеюсь, они, по крайней мере, обновят свою документацию. – Laxman

Смежные вопросы