相当于Chrome中的onbeforescriptexecute

时间:2013-08-08 07:57:48

标签: javascript

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

3 个答案:

答案 0 :(得分:3)

以下是onbeforescriptexecute事件的填充: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有点棘手,您可能需要使用自定义观察器来扫描它。

答案 1 :(得分:0)

我认为这只适用于Firefox :(抱歉。

答案 2 :(得分:0)

一个非常糟糕的建议:

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

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

稍微好一点

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

我认为最好的解决方案是使用带有AMD加载器的异步模块,例如require.js,这样可以使代码更有条理。

我确实意识到它并没有解决你的问题,但希望我能帮助你一点点。)