Estoy tratando de usar socket.io en mi extensión de Chrome. He configurado el servidor express y está funcionando perfectamente, incluye socket.io de la siguiente manera:
const express = require("express"); const cors = require("cors"); const http = require("http"); const { Server } = require("socket.io"); const app = express(); app.use(cors()); const httpServer = http.createServer(app); const io = new Server(httpServer, { cors: { origin: "*", }, }); io.on('connection', (socket) => { //all of our things we are going to use in sockets, different pipelines console.log("User connected: " + socket.id); socket.on("Alert", (data) => { console.log(data); }) }); He intentado agregar socket.io en el manifiesto content_scripts js de la siguiente manera:
"content_scripts": [ { "js": [ "socket.io.4.5.1.js" ] } ] y el archivo content.js incluye el siguiente código como se muestra a continuación:
const socket = io('ws://localhost:3001'); socket.on('connection'); Después de obtener la configuración anterior cuando intento cargar la extensión de Chrome, muestra un error que indica que Uncaught ReferenceError: io is not defined en content.js. Junto con esto, también recibo otro error de Uncaught SyntaxError: Unexpected token 'export' en mi archivo socket.io.
Intenté buscar en la pregunta de la comunidad, pero no pude obtener ninguna solución para esto. Lo único que asumo de la respuesta de wOxxOm desde aquí es que no puedo usar MV3 si necesito usar socket.io Si no puedo usarlo, entonces cuál es la mejor manera de hacerlo, ya que necesito comunicarme con mi servidor varias veces. y no podía usar una API debido a las frecuentes actualizaciones en el contenido de la página.
Puede usar socketio en el trabajador de servicio en sí mismo, para mantener al trabajador de servicio activo, necesita abrir un hilo de ventana, puede crearlo usando la función chrome.windows.create, vea más en la documentación de javascript. Lo estamos usando de la misma manera y este enfoque funcionó para nosotros.
Además, si socket io usa una ventana o un documento, use jsdom para que la ventana y el documento estén disponibles.