RCh*_*pps 0 javascript html5 websocket google-chrome-extension google-chrome-devtools
我在这个问题上花了几个星期,但似乎找不到解决方法。这是用例。我正在开发chrome扩展程序,此扩展程序的主要目的之一是检测WebSocket何时打开或关闭。我看过WebSockets的HTML5规范,它们公开了以下相关方法/事件:
WebSocket.prototype.readyState = 0;
WebSocket.prototype.onopen = 0;
WebSocket.prototype.onerror = 0;
WebSocket.prototype.onclose = 0;
function WebSocket(url,protocols) {}
WebSocket.prototype.close = function(code,reason) {};
Run Code Online (Sandbox Code Playgroud)
由于我无法从扩展中访问单个实例,因此我不得不依靠包装这些原型来确定何时调用它们。例如:
WebSocket.prototype.close = function (close) {
console.log("Closing socket....");
return function (code, reason) {
return close.apply(this, arguments);
};
}(WebSocket.prototype.close);
Run Code Online (Sandbox Code Playgroud)
但是,我真正想做的是以某种方式为onopen,onerror或onclose包装或注册侦听器。不幸的是我不知道该怎么做。我尝试了一堆不同的方法。上面的方法适用于“关闭”,但它们不提供我依赖的“打开”。最有前途的想法没有用,它是:
WebSocket.prototype.constructor = function (constructor) {
debugger;
console.log("Register all my events here!");
constructor.apply(this, arguments);
}(WebSocket.prototype.constructor);
Run Code Online (Sandbox Code Playgroud)
不幸的是,我从不能够达到断点或查看控制台日志,这使我相信自己做错了什么。
作为最后的选择,我尝试使用Object.Observe(),但无法观察原型:
Object.observe(WebSocket.prototype.readyState, function (changes) {
console.log("Ready state");
});
Object.observe(WebSocket.prototype.onopen, function (changes) {
console.log("On open");
});
Run Code Online (Sandbox Code Playgroud)
因此,总而言之,我尝试了几种不同的方法,但最终我碰壁了。最后,我的目标是通过侦听任何公开的方法或事件来检测WebSocket何时打开或关闭。任何帮助将不胜感激。
更新: 这是一个小提琴,包括以下建议:
http://jsfiddle.net/s35zpfq9/1/
谢谢!
您可以在切换后将WebSocket包装为监视所有创建的实例:
(function(){
var ws = window.WebSocket;
window.WebSocket = function (a, b) {
var that = b ? new ws(a, b) : new ws(a);
that.addEventListener("open", console.info.bind(console, "socket open"));
that.addEventListener("close", console.info.bind(console, "socket close"));
that.addEventListener("message", console.info.bind(console, "socket msg"));
return that;
};
window.WebSocket.prototype=ws.prototype;
}());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1644 次 |
| 最近记录: |