如何使用JavaScript检测页面404错误?

San*_*too 24 html javascript http-status-code-404 dom-events

我有一个HTML页面,其中引用了几个JavaScript,CSS和图像文件.这些引用是动态注入的,用户可以手动将HTML页面和支持文件复制到另一台机器.

如果缺少某些JS或CSS,浏览器会在控制台中抱怨.例如:

错误GET文件:/// E:/SSC_Temp/html_005/temp/Support/jquery.js

我需要以某种方式在HTML页面的内联JavaScript上向我报告这些错误,因此我可以要求用户首先验证是否正确复制了支持文件.

有一个window.onerror事件告诉我,页面上有一个JS错误,例如意外语法错误,但是如果发现404 Not Found错误,则不会触发.我想在任何资源类型的情况下检查这种情况,包括CSS,JS和图像.

我不喜欢使用jQuery AJAX来验证文件是否物理存在 - 每个页面加载的I/O开销都很昂贵.

错误报告必须包含缺少的文件名称,以便我可以检查文件是核心还是可选的.

有任何想法吗?

Ale*_*ara 55

要捕获所有error的页面上的事件,您可以使用addEventListeneruseCapture设置参数true.之所以window.onerror不这样做,是因为它使用了泡沫事件阶段,而error您想要捕获的事件不会冒泡.

如果在加载任何外部内容之前将以下脚本添加到HTML中,则应该能够捕获所有error事件,即使在脱机加载时也是如此.

<script type="text/javascript">
window.addEventListener('error', function(e) {
    console.log(e);
}, true);
</script>
Run Code Online (Sandbox Code Playgroud)

您可以访问导致错误的元素e.target.例如,如果您想知道哪些文件没有加载到img标记上,您可以使用它e.target.src来获取无法加载的URL.

注意:这在技术上不会检测错误代码,但如果图像加载失败,无论状态代码如何,它在技术上都表现相同.根据您的设置,这可能就足够了,但是例如,如果返回带有效图像的404,则不会触发错误事件.

  • 如果<img>返回404和有效图像,则不会触发此事件处理程序.<img>元素不会触发错误,因此不会冒泡. (3认同)