javascript - 如何在 Phantom.js 中监控 WebSocket 通信?

标签 javascript websocket phantomjs

Phantom.js 文档展示了如何监控 HTTP 通信:http://phantomjs.org/network-monitoring.html

但是,它不适用于 WebSockets。如何在 Phantom.js 中监控 WebSocket 通信?

最佳答案

PhantomJS 1.x 不支持 WebSockets1,因此您无法监控它们。如果页面使用 WebSockets 的一些回退,那么 page.onResourceRequestedpage.onResourceReceived可用于记录消息的元数据。 PhantomJS 不会公开以任何方式发送的实际数据。

WebSockets 在 PhantomJS 2 中正常工作。由于不需要回退,因此不可能观察这些事件的流量。上面提到的事件处理程序不显示任何内容。查看消息的唯一方法是尽早代理 WebSocket 对象:

page.onInitialized = function(){
    page.evaluate(function(){
        (function(w){
            var oldWS = w.WebSocket;
            w.WebSocket = function(uri){
                this.ws = new oldWS(uri);
                ...
            };
            w.WebSocket.prototype.send = function(msg){
                w.callPhantom({type: "ws", sent: "msg"});
                this.ws.send(msg);
            };
            ...
        })(window);
    });
};
page.onCallback = function(data){
    console.log(JSON.stringify(data, undefined, 4));
};

1 我的测试实际上表明 websocket echo page适用于 v1.9.6 及更高版本,但不适用于 v1.9.0。

关于javascript - 如何在 Phantom.js 中监控 WebSocket 通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27642875/

相关文章:

javascript - Bootstrap 4 如何在同一页面上使用多个 jQuery 版本

Socket.IO 上的 PHP 应用程序 + 基于 WebSocket 的通知

javascript - JQuery 在 div 内添加文本区域

javascript - 简单的 CSS DIV Tab 图像更改

php - Pusher 应用程序事件未触发

javascript - 如何知道使用 document.createElement 创建的元素是否仍然存在

angularjs - 使用 pouchdb 设置 karma 单元测试

highcharts - 我无法让 Highcharts phantomJs 导出服务器工作

javascript - 删除以前添加的类不起作用

Gorilla WebSocket WriteMessage 错误 - Go Lang