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

Posted

技术标签:

【中文标题】Chrome 远程调试 - 获取页面通知【英文标题】:Chrome Remote Debugging - Getting Page Notifications 【发布时间】:2014-06-24 02:48:32 【问题描述】:

我正在远程调试 Chrome,使用 --remote-debugging-port 开关并运行另一个我正在使用 Web 套接字进行调试的 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】:

问题是通知未启用。要启用通知:

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)、网络通知等也是如此......

【讨论】:

以上是关于Chrome 远程调试 - 获取页面通知的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 远程调试不适用于 IP

chrome浏览器远程调试移动端Web页面

在 Android 问题上远程调试 Chrome

从 Chrome 远程调试协议访问 JavaScript 变量

Chrome 远程调试 - “待验证”

移动端Web开发调试之Chrome远程调试(Remote Debugging)