问题
I would like to know if its possible to get active WebSockets of a Website.
An example would be: var x = document.findWebSocket().
The websockets would be listed in Chrome under the Network Tab (In the dev tools section). From there the websockets are listed under "WS". I want to be able to do x.emit(..); as well.
So far i could only come up with var x = new WebSocket("wss://exampleUrl.com/socket.io/?EIO=3&transport=websocket", "protocol1");. But this only adds a new Websocket with a different sid from the one that i want to emit messages from.
adding "&sid = {SID of Active Websocket}" would not work.
回答1:
It's a bit hacky, but if you can inject code that runs before the site's code does (for example, with Tampermonkey and @run-at document-start), you can monkeypatch window.WebSocket so that whenever it's called, you add the created websocket to an array which you can examine later. For example, running the following on Stack Overflow:
// ==UserScript==
// @name 0 New Userscript
// @include /^https://stackoverflow.com
// @run-at document-start
// @grant none
// ==/UserScript==
const sockets = [];
const nativeWebSocket = window.WebSocket;
window.WebSocket = function(...args){
const socket = new nativeWebSocket(...args);
sockets.push(socket);
return socket;
};
setTimeout(() => {
// or create a button which, when clicked, does something with the sockets
console.log(sockets);
}, 1000);
results in [WebSocket] being logged (and you could proceed to do whatever you wanted to do with the instance, such as call emit).
来源:https://stackoverflow.com/questions/59915987/get-active-websockets-of-a-website-possible