Javascript 捕获混合内容错误以优雅地处理

joe*_*rgi 6 javascript https ads mixed-content

有没有办法全局捕获混合内容错误?

要明确:我不想允许不安全的内容,我想做的就是优雅地处理错误。

背景故事:我正在集成程序化广告,也就是说我必须包含一些脚本标签,它返回一些更多的 JavaScript,它可以加载更多的资源,等等......

我无法控制进入我网站的内容,有时这些资源包括 http 资源,这会引发混合内容错误。然后我留下了一个空的广告容器,看起来有点难看。此外,我可以尝试转售此广告空间,因为第一次尝试失败。

我已经尝试过 window.onerror,但没有成功。

Hen*_*ker 1

无法捕获混合内容警告,因为它们与 JavaScript 无关,而是由浏览器处理。

您可以做的是使用Upgrade-Insecure-Requests标头来阻止浏览器完全加载不安全的内容。并且,根据您的用例,您可以使用MutationObserver对 HTML 中的更改做出反应,或者在document.body捕获阶段监听错误事件以对错误做出反应:

<html>
  <head>
    <meta
      http-equiv="Content-Security-Policy"
      content="upgrade-insecure-requests"
    />
  </head>

  <body>
    <script>
      const el = document.createElement("img");
      el.src = "http://unsafeimg";
      document.body.appendChild(el);
      document.body.addEventListener(
        "error",
        (err) => {
          console.log("Failed to load\n", err.target);
        },
        /* Notice the true value here. It is required because Error Events do not bubble */
        true
      );
    </script>
  </body>
</html>

Run Code Online (Sandbox Code Playgroud)

另一种选择是设置一个Service Worker来拦截和处理不安全的请求。这可能是最好的解决方案,因为这可以让您全面了解网站尝试加载的数据。