如果页面重定向,则出现 Inappbrowser 错误
Inappbrowser error if the page redirects
我正在尝试打开 https://www.mywebsite.com/help in inappbrowser which then redirects to 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!");
});
我知道这是第三方页面的问题,但我希望我的应用能够处理它而不是崩溃。
感谢您的帮助。
不要隐藏!
尽管这个帖子在某些论坛上已经开放多年了,但我还是找不到这个问题的正确答案。
但是,我发现不隐藏 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
});
微调器一旦开始加载就会被实际页面覆盖。
我正在尝试打开 https://www.mywebsite.com/help in inappbrowser which then redirects to 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!");
});
我知道这是第三方页面的问题,但我希望我的应用能够处理它而不是崩溃。
感谢您的帮助。
不要隐藏!
尽管这个帖子在某些论坛上已经开放多年了,但我还是找不到这个问题的正确答案。
但是,我发现不隐藏 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
});
微调器一旦开始加载就会被实际页面覆盖。