我需要的是 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 被执行)。
在执行之前有什么方法可以“查看”其他脚本标签吗? 感谢您的帮助
编辑
- 我需要在 hook.js 中执行任何“魔法”,而无需修改(静态)其他 HTML。
- 没有 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/