Cordova InAppBrowser loaderror 事件未触发错误 500

Cordova InAppBrowser loaderror event not firing for Error 500

我对 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" 事件都正常运行。但是,当我故意将页面 return 设为 "error 500" 时,事件 "loaderror" 并未触发。

它确实会因其他错误而触发 - 比如当 phone 上没有互联网时。

非常感谢任何关于为什么会发生这种情况的想法。

查看 Android 的 InAppBrowser 插件代码,它内部使用 onReceivedError 方法处理 loaderror 事件。所以我从 webview 的角度来看这个问题并偶然发现了这个 link - https://code.google.com/p/android/issues/detail?id=968 ,它指出 onReceivedError 函数并不意味着捕获 HTTP 错误。

对于 HTTP 错误处理,我们可能必须使用不属于插件的 onReceivedHttpError 函数。我希望这不起作用的原因是有意义的。

我正在使用 Ionic 4,我无法使基于 config.xml 编辑的解决方案生效:

偏好名称="ErrorUrl" 值="myErrorPage.html"/

在 loaderror 上放置一个 addEventListener 也不起作用。看起来它不是由 http 错误触发的,插件需要修复。

但我们发现了一个更简单的 hack。

在 loadstop 上,我们等待 500 毫秒,然后我们通过使用 window.location.href

触发 executeScript 来获取已加载的 url

如果加载的 url 是自定义错误页面,在 Cordova 中(不是在 IAB 中)我们会显示带有后退按钮的自定义消息。

这是一个 hack,但满足了现在的要求