相当于Chrome中的onbeforescriptedexecute

Equivalent of onbeforescriptexecute in Chrome

本文关键字:onbeforescriptedexecute 中的 Chrome 相当于      更新时间:2023-09-26

Chrome中是否存在等效的onbeforescriptexecute或beforescript-execute事件?我想在加载页面上的任何javascript之前拦截并打印出正在执行的javascript代码。这应该包括脚本标记中的Javascript和onblur等其他属性。
感谢

以下是onbeforescriptexecute事件的polyfill:https://gist.github.com/jspenguin2017/cd568a50128c71e515738413cd09a890

它适用于Chrome和Edge,但具有讽刺意味的是,它不适用于Firefox。

要打印脚本内容,只需在事件处理程序中执行console.log(e.script.textContent);即可。您可以调用e.replacePayload(payload);来更改要运行的脚本,或者调用e.preventDefault()来阻止脚本。

e.preventDefault();优先于e.replacePayload(...);,如果多次调用e.replacePayload(...);,则最后一次调用将覆盖以前的所有调用。您可以调用e.stopPropagation();来确保您的新负载已注册。

不幸的是,textContent并不总是适用于大型脚本。它应该可以进行调试。此外,它只适用于"硬编码"的内联脚本,而不适用于从其他脚本动态注入的脚本。您仍然可以监视这些脚本,但不能干扰它们的执行。

对于onblur来说,这有点棘手,您可能需要使用一个自定义的观察器来扫描它。

我认为它只适用于Firefox:(对不起。

一个非常糟糕的建议:

默认情况下,脚本是以同步方式加载的(有空格,而不是async)。因此,您可以访问最新加载的脚本标记,在头中查找最后一个现有的<script>标记(这几乎与您试图实现的完全相反。

我很高兴看到你的问题有其他答案(可能更好),但使用这种行为的整个想法对我来说很糟糕。

稍微好一点

通常,要做类似的事情,您应该通过ajax加载脚本,并在将它们添加到DOM并执行之前对其进行处理。

在我看来,最好的解决方案是使用带有AMD加载程序(如require.js)的异步模块,这样可以让代码更有条理。

我确实意识到它不能解决你的问题,但希望我能帮你一点忙:)

相关文章:
  • 没有找到相关文章