我正在远程调试Chrome,使用--remote-debugging-port
开关并运行另一个我使用网络套接字调试的Chrome实例。这与我在网上看到的使用node.js进行调试的大多数示例有点不同。
我需要导航到一个页面,然后评估其中的一些代码。这两个操作都使用此代码按预期工作,我在第二个Chrome实例的页面中运行:
var socket = new WebSocket(url);
function debug(action, data){
var msg;
switch (action) {
case 'NAVIGATE':
msg = {'id':1001, 'method':'Page.navigate', 'params':{'url':data.urlToNavigate}};
break;
case 'EVALUATE':
msg = {'id':1002, 'method':'Runtime.evaluate', 'params':{'expression':data.jsCodeToEvaluate}};
break;
}
socket.send(JSON.stringify(msg));
}
我遇到的问题是获得notifications。我想在导航完成后评估代码(比方说,在文档加载后)。我通过以下方式在套接字上获取消息,但据我所知,当调试页面启动/接收导航命令时,接收到Page.navigate
方法的返回消息,而不是导航完成时。
socket.onmessage = function (event) {
var data = JSON.parse(event.data);
switch (data.id) {
case 1001:
//A navigation command to app page has been received but not yet navigated
break;
}
};
如何使用通知创建流程,例如:导航>等待导航完成>评估一些代码?我无法收到任何通知。
答案 0 :(得分:1)
问题是未启用通知。要启用通知:
socket.send(JSON.stringify({'id':12345, 'method':'Page.enable'}));
然后,收到通知:
socket.onmessage = function (event) {
var data = JSON.parse(event.data);
switch (data.method) {
case 'Page.frameNavigated':
console.log('Navigation completed');
break;
//....
}
}
同样适用于运行时通知(Runtime.enable
),网络通知等......