Chrome远程调试 - 获取页面通知

时间:2014-05-07 08:23:03

标签: javascript google-chrome google-chrome-devtools remote-debugging

我正在远程调试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;
    }
};

如何使用通知创建流程,例如:导航>等待导航完成>评估一些代码?我无法收到任何通知。

1 个答案:

答案 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),网络通知等......