一个应用程序使用 websocket onmessage() 事件来解析 websocket 响应消息。我想实时看到,websocket 响应数据在控制台接收到应用程序。
所以我想以下列方式覆盖 websocket“消息”方法 /onmessage 事件。
How to override WebSocket send() method
“发送”覆盖有效,但“消息”无效。
WebSocket.prototype.oldmessage = WebSocket.prototype.message;
WebSocket.prototype.message = function(data) {
console.log("ws: received data " + data);
WebSocket.prototype.oldmessage.apply(this, [data]);
};
而且这也不起作用
if (WebSocket.prototype.onmessage) {
(function() {
var old_handler = WebSocket.prototype.onmessage;
WebSocket.prototype.onmessage = function() {
console.log('hii')
old_handler.apply(this, arguments);
};
}());
}
答案 0 :(得分:0)
你看到 onmessage 是一个带有 get 和 set 方法的属性,其中 send 只是一个你可以覆盖的方法,似乎没有简单的方法来覆盖 getter 和 setter,这里要考虑的另一件事是 Websocket.prototype 是不可扩展,您不能向原型添加新属性(尽管您可以更新)。 你可以做这样的事情
window.onmessagegetter = Object.getOwnPropertyDescriptor(WebSocket.prototype, 'onmessage').get;
window.onmessagesetter = Object.getOwnPropertyDescriptor(WebSocket.prototype, 'onmessage').set;
Object.defineProperty(window.WebSocket.prototype, 'onmessage', {
get() {
logger.log('getCalled');
return window.onmessagegetter.apply(this);
},
set() {
logger.log('setCalled');
return window.onmessagesetter.apply(this, arguments);
}
});