我想为Javascript创建一个自定义探查器,作为Chrome DevTools扩展。为此,我必须检测网站的所有Javascript代码(解析AST,注入钩子,生成新源代码)。使用此处描述chrome.devtools.inspectedWindow.reload()
的参数应该很容易做到这preprocessorScript
一点:https : //developer.chrome.com/extensions/devtools_inspectedWindow。
不幸的是,此功能已被删除(https://bugs.chromium.org/p/chromium/issues/detail?id=438626),因为没有人在使用它。
您是否知道我可以通过Chrome扩展程序实现同一目的的任何其他方式?还有其他方法可以用更改的版本替换传入的Javascript源吗?这个问题是Chrome扩充功能(可能是其他浏览器的扩充功能)特有的问题,我想在改用其他方法(例如专用应用程式)之前将其作为最后的手段。
使用Chrome调试协议。
首先,使用DOMDebugger.setInstrumentationBreakpoint
witheventName: "scriptFirstStatement"
作为参数向每个脚本的第一条语句添加一个断点。
其次,在Debugger域中,有一个名为的事件scriptParsed
。聆听它,如果被调用,用于Debugger.setScriptSource
更改信号源。
最后,使用Debugger.resume
修改源文件后,每次都调用setScriptSource
。
半伪代码示例:
// Prevent code being executed
cdp.sendCommand("DOMDebugger.setInstrumentationBreakpoint", {
eventName: "scriptFirstStatement"
});
// Enable Debugger domain to receive its events
cdp.sendCommand("Debugger.enable");
cdp.addListener("message", (event, method, params) => {
// Script is ready to be edited
if (method === "Debugger.scriptParsed") {
cdp.sendCommand("Debugger.setScriptSource", {
scriptId: params.scriptId,
scriptSource: `console.log("edited script ${params.url}");`
}, (err, msg) => {
// After editing, resume code execution.
cdg.sendCommand("Debugger.resume");
});
}
});
上面的实现不是理想的。它可能应该监听断点事件,使用关联的事件数据进入脚本,编辑脚本,然后继续。听scriptParsed
然后恢复调试器是不应该在一起的两件事,它可能会引起问题。不过,这使它成为一个更简单的示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句