Chrome DevTools Protocol Target域事件无法触发但createTarget可正常运行如何解决
问题原因
- Target域的事件推送默认处于关闭状态,不存在
Target.enable方法是因为该域使用Target.setDiscoverTargets替代了通用enable逻辑,你没有主动开启目标发现的话,浏览器不会主动推送任何Target相关事件。 Target.createTarget是客户端主动发起的命令调用,不需要依赖事件推送机制,所以就算没有开启目标发现也可以正常执行。
解决方法
在注册Target事件回调之前,先调用Target.setDiscoverTargets开启目标发现即可,修正后的代码如下:
const CDP = require("chrome-remote-interface"); async function example() { let client = await CDP(); const { Network, Page, Browser, Input, Target, DOM, Runtime } = client; await Page.enable(); // 新增:开启Target目标发现,才能接收相关事件推送 await Target.setDiscoverTargets({ discover: true }); Target.targetInfoChanged((param) => { console.log("targetInfoChanged", param); }); Target.receivedMessageFromTarget((param) => { console.log("receivedMessageFromTarget", param); }); Target.targetCreated((param) => { console.log("targetCreated", param); }); Target.targetDestroyed((param) => { console.log("targetDestroyed", param); }); Page.loadEventFired((param) => { console.log("load", param); }); await Target.createTarget({ url: "https://www.google.com/" }); await new Promise(() => {}); return } example();
补充说明
如果需要接收receivedMessageFromTarget事件,还需要额外调用Target.attachToTarget绑定对应目标,或者开启Target.setAutoAttach自动绑定新创建的目标,同时设置flatten参数为true适配新版协议。
内容的提问来源于stack exchange,提问作者user16240458
相关产品推荐
相关产品推荐

