我有一个通过<script>
包含的库,它将自身添加到window
对象中,然后立即在下一个<script>
中被引用,即:
<script src="lib.js"></script>
<script>
var foo = new LIB.SomeClass();
LIB.doStuff();
....
</script>
出于分析目的,我现在需要将代理附加到此库/全局LIB
对象 的多个属性之前,然后触发下一个脚本(因此,在脚本中的LIB.SomeClass()
之前)以上)。
所有这些都必须以编程方式发生-我不能依靠硬编码的行号,也不能修改lib.js
以在一切都初始化后立即触发虚拟事件。
我目前的做法是:
Debugger.scriptParsed
的{{1}}事件lib.js
文件有多少行(lib.js
)event.endLine
(lib.js
Debugger.setBreakpointByUrl({lineNumber: ...})
触发Debugger.paused
处理程序中安装代理但是,这似乎不必要地令人费解,尤其是重新加载感觉就像是一个糟糕的hack。
问题:
有没有办法在Debugger.paused
之后注入我的工具代码,但是仍然可以保证在加载下一个脚本之前?
我曾尝试在Debugger.scriptParsed
处理程序中调用Debugger.pause
,但这太不可靠了,只会导致频繁的比赛情况。
谢谢。
答案 0 :(得分:0)
我希望这可以帮助您将.js文件注入页面。
await page.evaluateOnNewDocument(
//just put the location of your .js file
fs.readFileSync(`${__dirname}/scripts/preload.js`, 'utf8'),
);