在Chrome中是否有等效的onbeforescriptexecute或beforescript执行事件?我想在页面上的任何javascript加载之前截取并打印出正在执行的javascript代码。这应该包括脚本标签中的Javascript和onblur等其他属性 感谢
答案 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,这样可以使代码更有条理。
我确实意识到它并没有解决你的问题,但希望我能帮助你一点点。)