Получить активные веб-сокеты на сайте возможно? - PullRequest
1 голос
/ 26 января 2020

Я хотел бы знать, возможно ли получить активные WebSockets на веб-сайте. Примером может быть: var x = document.findWebSocket(). Веб-сокеты будут перечислены в Chrome на вкладке «Сеть» (в разделе «Инструменты разработчика»). Оттуда веб-сокеты перечислены в разделе «WS». Я тоже хочу иметь возможность x.emit(..);.

Пока что я могу только придумать var x = new WebSocket("wss://exampleUrl.com/socket.io/?EIO=3&transport=websocket", "protocol1");. Но это только добавляет новый Websocket с sid, отличным от того, от которого я хочу отправлять сообщения.

Добавление "& sid = {SID Active Websocket}" не будет работать.

1 Ответ

0 голосов
/ 26 января 2020

Это немного глупо, но если вы можете внедрить код, который запускается раньше, чем код сайта (например, с помощью Tampermonkey и @run-at document-start), вы можете установить monkeypatch window.WebSocket, чтобы при каждом вызове вы добавляли созданный веб-сокет в массив, который вы можете проверить позже. Например, если выполнить следующее при переполнении стека:

// ==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);

приводит к регистрации [WebSocket] (и вы можете продолжать делать все, что вы хотели сделать с экземпляром, например, вызов emit).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...