我想在一个网页中检测到一些javascript或css元素加载失败,并提醒用户.我有下面的,但它不工作.

(实际的用例涉及最终用户需要安装某些证书,如果元素无法加载,页面将给出如何更新浏览器/操作系统的指令.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="x-ua-compatible" content="ie=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <title>Lorum Title Ipsus</title>

    <script>
      
      document.addEventListener('DOMContentLoaded', (event) => {
        // Monitor <script> elements
        document.querySelectorAll('script[src]').forEach(script => {
            script.addEventListener('error', function() {
            alert('Failed to load script:', script.src);
          }, true);
        });
    
        // Monitor <link rel="stylesheet"> elements
        document.querySelectorAll('link[rel="stylesheet"]').forEach(link => {
            link.addEventListener('error', function() {
            alert('Failed to load stylesheet:', link.href);
          }, true);
        });

      });
      </script>
    <!-- **** NOTE THE OBVIOUS ERROR BELOW -->
    <link href="https://ERRRORcdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
  </head>

  <body>
    Lorum Ipsus
  </body>
</html>

推荐答案

对于同步脚本,DOMContentLoaded事件仅在它们被(try )加载和判断之后才会触发,因此您错过了error事件.

您可以try 一个mutation observer来检测脚本的创建,并立即附加错误处理程序,或者try 将错误event处理程序附加到windowdocumentdocument.head本身(尽管它是should not bubble).

Javascript相关问答推荐

为什么有些库公开了执行相同任务的方法,但每个方法都处于同步/同步上下文中?

更新Reduxstore 中的状态变量,导致整个应用程序出现不必要的重新渲染

reaction如何在不使用符号的情况下允许多行返回?

useNavigation更改URL,但不呈现或显示组件

使用javascript将Plotly Expandable Sparkline转换为HighCharter Plot在bslib卡中

嵌套异步JavaScript(微任务和macrotask队列)

给定一个凸多边形作为一组边,如何根据到最近边的距离填充里面的区域

Angular 中的类型错误上不存在获取属性

类构造函数不能在没有用With Router包装的情况下调用

是什么导致了这种奇怪的水平间距错误(?)当通过JavaScript将列表项元素追加到无序列表时,是否在按钮之间?

React.Development.js和未捕获的ReferenceError:未定义useState

更新动态数据中对象或数组中的所有值字符串

使用带有HostBinding的Angular 信号来更新样式?

如何使用JS创建一个明暗功能按钮?

JavaScript不重定向配置的PATH

Node.js错误: node 不可单击或不是元素

react 路由如何使用从加载器返回的数据

在单击按钮时生成多个表单时的处理状态

在高位图中显示每个y轴系列的多个值

Django模板中未加载JavaScript函数