JavaScript:检测资源加载失败(不是404)

JavaScript:检测资源加载失败(不是404),javascript,network-programming,Javascript,Network Programming,有没有一种方法可以检测JS中不是404的资源加载失败 <html><body> <img> <script> window.addEventListener('error', function (e) { console.log(e); }, true); document.querySelector("img").src = "https://www.google.com/images/branding/googlelogo/2x/goo

有没有一种方法可以检测JS中不是404的资源加载失败

<html><body>
<img>
<script>

window.addEventListener('error', function (e) {
  console.log(e);
}, true);

document.querySelector("img").src = "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png";

</script></body></html>


对于404和关闭wifi,我得到了类似的事件对象,但没有详细信息。有没有办法区分这两种情况?我认为404是可以的,但将网络(套接字)故障处理为错误。

您得到的事件不会告诉您这一点,不会。但是有各种API可以帮助您了解发生了什么。您可以查看,但要注意,在不同品牌的浏览器中,它会告诉您微妙的不同内容。(您还可以通过
窗口上的和事件
侦听联机/脱机更改)

使用
navigator.onLine

window.addEventListener('error', function (e) {
    if (navigator.onLine) {
        // It was probably a 404 or some other problem with this specific image
    } else {
        // User is "offline," according to the browser's rules for what's online and offline
    }
});

你得到的事件不会告诉你这一点,不会。但是有各种各样的API可以帮助你弄清楚发生了什么。您可以查看,但要注意,在不同品牌的浏览器中,它会告诉您微妙的不同内容。(您还可以通过
窗口上的和事件
侦听联机/脱机更改)

使用
navigator.onLine

window.addEventListener('error', function (e) {
    if (navigator.onLine) {
        // It was probably a 404 or some other problem with this specific image
    } else {
        // User is "offline," according to the browser's rules for what's online and offline
    }
});

有一些老式的方法可以检测图像和脚本文件的加载是否成功

使用img元素,您可以内联或附加onerror事件处理程序

对于JavaScript文件,如果定义了函数,则该函数将位于全局命名空间中。例如,test.js:

testfunc=function(){

}
然后包括JavaScript文件,但不知道该文件是否已加载:

&lt;script src="test.js"&gt;&lt;/script&gt;
但你可以询问国旗:

if (!self.testfunc) // test.js failed to load

有一些老式的方法可以检测图像和脚本文件的加载是否成功

使用img元素,您可以内联或附加onerror事件处理程序

对于JavaScript文件,如果定义了函数,则该函数将位于全局命名空间中。例如,test.js:

testfunc=function(){

}
然后包括JavaScript文件,但不知道该文件是否已加载:

&lt;script src="test.js"&gt;&lt;/script&gt;
但你可以询问国旗:

if (!self.testfunc) // test.js failed to load

你能查一下e.message吗?@RinkeshGolwala我查过了,但它没有。据我所知,它不是一个
ErrorEvent
对象,而是一个普通的
Event
对象。你能检查
e.message
一次吗?@RinkeshGolwala我检查过,但它没有。据我所知,它不是一个
ErrorEvent
对象,而是一个普通的
Event
对象。谢谢,它可能很有用,但我想处理的不仅是离线的,还有糟糕的网络/套接字错误。@KJ-我想你不会得到那种级别的信息。我的意思是,你可以监控上面的事件,跟踪在线和离线之间状态的变化频率,这可以让你推断出一个不稳定的连接,但你不会得到任何级别的细节。即使只是简单地说一些有用或不有用的东西,也可以看到并向下滚动到黄色警告上的大红色。(我想他们不想让我们错过它。:-)谢谢,它可能会有用,但我不仅要处理脱机,还要处理糟糕的网络/套接字错误。@KJ-我想你不会得到那种级别的信息。我的意思是,你可以监控上面的事件,跟踪在线和离线之间状态的变化频率,这可以让你推断出一个不稳定的连接,但你不会得到任何级别的细节。即使只是简单地说一些有用或不有用的东西,也可以看到并向下滚动到黄色警告上的大红色。(我想他们不想让我们错过它。:-)