Когда в 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');
), прослушиватель событий работает как положено.