Ошибка Inappbrowser, если страница перенаправляется

Я пытаюсь открыть https://www.mywebsite.com/help в inappbrowser, который затем перенаправляет на https://www.mywebsite.com/help/residential-customer (предположим, это сторонняя страница, где у меня нет контроля разработчиков). Я скрываю inappbrowser, чтобы показывать загрузчик до загрузки страницы.

Проблема:

После loadstart не срабатывал loadstop, на некоторых устройствах срабатывает loaderror!

var path="https://www.mywebsite.com/help";

var ref = cordova.InAppBrowser.open(path, '_blank', 'toolbarposition=top,closebuttoncaption=Back,location=no,hardwareback=no,hidden=yes');

showLoadingIcon();


//loadstop event
ref.addEventListener('loadstart', function(event) {
    //todo
});

//loadstop event
ref.addEventListener('loadstop', function(event) {
    hideLoadingIcon();
    ref.show();
});

//exit event
ref.addEventListener('exit', function(event) {
    hideLoadingIcon();
    ref.close();
});

//loaderror event
ref.addEventListener('loaderror', function(event) {
    hideLoadingIcon();
    ref.close();
    showMessage("not happening!");
});

Я понял, что это проблема со сторонней страницей, но я хочу, чтобы мое приложение обрабатывало ее, а не давало сбой.

Спасибо за помощь.


person ShAkKiR    schedule 29.05.2018    source источник


Ответы (1)


Не скрывайте это!

Я не смог найти правильный ответ на этот вопрос, несмотря на то, что тема была открыта на некоторых форумах в течение многих лет.

Однако я обнаружил, что если не скрывать inappbrowser, эта проблема частично решается. И я смог внедрить счетчик в inappbrowser для улучшения взаимодействия с пользователем, избегая неуклюжего белого экрана.

Пользовательский счетчик

следующее решение имеет много альтернатив, можно использовать html-файл «spinner.html» вместо жесткого кодирования, но этот конкретный подход работает на разных платформах (nexus 5, пиксель 1/2, iphone 6,7)

//use some really slow page for testing
var path="https://www.facebook.com/";

//if you have a spinner.html, you can load that instead of path here in inappbrowser, but make sure it works in all devices.

var ref = cordova.InAppBrowser.open(path, '_blank', 'toolbarposition=top,closebuttoncaption=Back,location=no,hardwareback=no');

//spinner html
var spinner ="<!DOCTYPE html><html><head><meta name='viewport' content='width=device-width,height=device-height,initial-scale=1'><style>.loader {position: absolute;    margin-left: -2em;    left: 50%;    top: 50%;    margin-top: -2em;    border: 5px solid #f3f3f3;    border-radius: 50%;    border-top: 5px solid #3498db;    width: 50px;    height: 50px;    -webkit-animation: spin 1.5s linear infinite;    animation: spin 1.5s linear infinite;}@-webkit-keyframes spin {  0% { -webkit-transform: rotate(0deg); } 100% { -webkit-transform: rotate(360deg); }}@keyframes spin {  0% { transform: rotate(0deg); }  100% { transform:rotate(360deg); }}</style></head><body><div class='loader'></div></body></html>";

//intended webpage is loaded here (facebook)
ref.executeScript({code: "(function() {document.write(\""+spinner+"\");window.location.href='"+path+"';})()"});

//loadstop event
ref.addEventListener('loadstart', function(event) {
    //nothing specific needed for spinner                        
});

//loadstop event
ref.addEventListener('loadstop', function(event) {
    //nothing specific needed for spinner
});

spinner будет перезаписан реальной страницей, как только она начнет загружаться.

person ShAkKiR    schedule 29.05.2018