javascript - 拦截脚本加载

标签 javascript

我需要的是 Hook /拦截其他外部 JS 负载。 我可以将js放在文档中的任何位置

示例:

<script src="hook.js"></script>
<script src="a.js"></script>
<script src="b.js"></script>

Hook.js 应该拦截 a.js 和 b.js。问题是,当执行 hook.js 时,我看不到其他脚本(document.scripts 仅包含 hook.js)并且文档就绪事件为时已晚(脚本 a.js 和 b.js 被执行)。

在执行之前有什么方法可以“查看”其他脚本标签吗? 感谢您的帮助

编辑

  1. 我需要在 hook.js 中执行任何“魔法”,而无需修改(静态)其他 HTML。
  2. 没有 jQuery

最佳答案

信用在这里:https://stackoverflow.com/a/59424277/2016831 您可以使用 MutationObserver 来查看哪些元素被添加到 DOM 中,添加它们时,只需更改源代码,或者如果它引用另一个 URL,只需将其重定向到您自己的服务器,并将原始 URL 作为改为获取参数,并以这种方式返回修改后的代码。

根据上面的答案,你可以这样做:

<script>
new MutationObserver((m, o) => {
  let potentialScript = document.querySelector("script + script");
  console.log(potentialScript.textContent);
  if(potentialScript) {
    o.disconnect();
    potentialScript
    .textContent = 
    potentialScript
    .textContent
    .replace(
      "})()",
      `
        window.wow = mySecretMethod;
        })()
      `
    );
    
    
  }
}).observe(
  document.body,
  {
    childList:1
  }
);

</script>

<script>
(function() {
  let mySecretMethod = () => {
    //does a bunch of evil secret stuff
    console.log("HA!");
  };
})();

wow()
</script>

<script>
console.log(wow())
</script>

或者,您可以使用 Chrome 扩展程序重定向 HTTP 请求,请参阅 https://stackoverflow.com/a/61202516/2016831了解更多

关于javascript - 拦截脚本加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24809309/

相关文章:

javascript - 为什么我的 onclick 事件不显示我的 JSON 文件?

除 console.log 之外的 Javascript 输出函数

javascript - 为什么 'find' 查询在 MongoDB 中返回一个 Query 对象?

javascript - 需要 ParsleyJS 和 data-parsley-required

javascript - 如何反转 Flot 堆积条形图中的图例标签?

javascript - Onscroll 视频必须播放一次

javascript - 使用 Face-api.js 检测面部时出错预期媒体为 HTMLImageElement 类型 | HTMLVideo 元素 | HTMLCanvas元素

javascript - 如何在页面互换时添加动画?

javascript - 如何禁用 vuejs 路由器链接?

javascript - 拖放应用负位置