Событие сообщения InAppbrowser срабатывает только один раз - PullRequest
0 голосов
/ 21 сентября 2019

Когда в InAppBrowser открывается удаленная страница, и пользователь нажимает одну из кнопок общего доступа, например «mailto:» или «whatsapp: //», вместо открытия приложения InappBrowser пытается открыть эту ссылку в том же окне, что вызываетошибка.

Чтобы исправить это, на удаленном веб-сайте я отменяю поведение кнопки по умолчанию и отправляю сообщение postMessage, содержащее ссылку.Главное окно приложения получает ссылку и открывает ее в системном браузере.

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

Код на удаленной странице, отправляющей postMessage:

$(".share-button").on('click', function(e) {
    var href = $(this).attr('href');
    // I've modified app's userAgent string to determine if page is opened in app
    if (navigator.userAgent.indexOf('cordovaapp') !== -1) {
        e.preventDefault();
        console.log('sending message', href);
        webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify({url: href}));
        return false;
    }
});

Прослушиватель событий в приложении Cordova:

element.on('click', function(e) {
    e.preventDefault();
    var browserWindow = cordova.InAppBrowser.open(element.attr('href'), element.attr('target'), 'location=no,zoom=no');

    browserWindow.addEventListener('message', function(params) {
        console.log('params', params);
        if (params.data.url) {
            cordova.InAppBrowser.open(params.data.url, '_system');
        } 
    });

    return false;
});

UPD: если функция обратного вызова сообщения не содержит другого вызова inAppBrowser (cordova.InAppBrowser.open(params.data.url, '_system');), прослушиватель событий работает как положено.

...