我在使用InAppBrowser时遇到问题。我正在尝试捕获可能来自我正在加载的网站的错误,并且我通过错误的.htaccess来模拟这个错误。这会产生错误500.
我有以下代码:
ref = cordova.InAppBrowser.open($openuri, '_blank', 'location=no,toolbar=no,zoom=no,enableviewportscale=no,disallowoverscroll=no');
ref.addEventListener("loadstop",function() {
.....
});
ref.addEventListener("loaderror",function() {
alert('Toot');
});
ref.addEventListener('loadstart', function(event) {
.....
});
网站正在打开,所有“loadstop”和“loadstart”事件都正常运行。但是,当我故意让页面返回“错误500”时,事件“loaderror”没有被触发。
它可以解决其他错误 - 例如手机上没有互联网时。
对于为何发生这种情况的任何想法都受到高度赞赏。
答案 0 :(得分:5)
查看Android的InAppBrowser插件代码,它通常使用onReceivedError
方法处理loaderror
事件。所以我从webview的角度看了这个问题并偶然发现了这个链接 - https://code.google.com/p/android/issues/detail?id=968,它指出onReceivedError
函数并不意味着捕获HTTP错误。
对于HTTP错误处理,我们可能必须使用不属于插件的onReceivedHttpError
函数。我希望为什么这不起作用是有道理的。
答案 1 :(得分:0)
我正在使用Ionic 4,但我无法基于config.xml编辑使该解决方案正常工作:
preference name =“ ErrorUrl” value =“ myErrorPage.html” /
将addEventListener置于loaderror上也不起作用。看来它不是由http错误触发的,并且插件需要修复。
但是我们发现了一种更简单的黑客手段。
在loadstop上,我们等待500毫秒,然后通过使用and window.location.href触发executeScript来获取已加载的url
如果加载的网址属于自定义错误页面,则在Cordova(不是IAB)中,我们会显示带有后退按钮的自定义消息。
这是一个hack,但现在可以满足要求
答案 2 :(得分:-2)
这是我在InAppBrowser中处理状态码500的方式。
请不要尝试任何操作请不要给予负面的评价因为其他人可能会有用,请先思考一下再提供一些信息。
您可以尝试使用ionic HTTP plugin
处理404或您要处理的任何状态代码
在事件'iab.on('loadstop')之前处理它
下面显示的图片,我们可以获取状态
**
它为我工作,我在我的项目中使用InAppBrowser,这是我的 解决方案
**
取决于您对要求的处理方式