Chrome 与外部脚本的扩展套接字通信

Chrome Extension socket communication with external script

我会尽量缩短。在过去的 6 个小时里,我一直在努力寻找一种方法,让 Chrome 扩展与我机器上的 Node.js 脚本进行通信。我首先尝试使用 socket.io,但经过几个小时的试验和尝试,我发现您不能在 Chrome 扩展上使用 require。我的第二次尝试是使用 chrome.sockets,经过一番研究,我发现您也不能使用 chrome.sockets。我目前迷路了,不知道该怎么做才能实现两者之间的交流。

我想要的是我机器上的脚本作为服务器,Chrome扩展作为客户端。客户端不会接收任何请求,只是发送,服务器当然只会接收请求。

这是我目前拥有的:

服务器:

var app = require('http').createServer(handler).listen(3690);
var io = sockets(app)

function handler(req,res){
    console.log(req.url);
    res.writeHead(200, {'Content-Type':'text/plain'});
    res.end('Hello Node\n You are really really awesome!');
}

io.sockets.on('connection',function(socket){
    console.log("Hola")
    
    socket.on("statusUpdate", (data) => {
        console.log(data);
    });
});

客户端(我需要它做什么):

var socket = io('http://localhost:3690');
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    console.log("Received");
    if (request[0] == "updateStatus") {
        console.log(request[1])
        socket.send(request[1])
    }
});

在这一点上,我不知道我能做些什么才能让两人交流。也许服务器不会向客户端发送任何请求这一事实会有所帮助,但我仍然不知道我能做些什么来解决这个问题。如果有人能帮助我并引导我朝着正确的方向前进,那就太好了。感谢您的宝贵时间和帮助。

感谢@JakeHolzinger,我找到了解决方案。简而言之,我必须将包(或只使用已经创建的包)作为一个脚本,然后我必须在其中导入 manifest.json重要 它被称为 BEFORE background.js 脚本,否则它不会导入它。 manifest.json 看起来像:

"background": {
    "scripts": ["socket.io.js", "background.js"]
}

从那里,我可以自由使用 socket.io 库,如果您与客户端 (localhost) 通信,它不会受到 CORS 策略的影响。脚本现在看起来像这样:

var socket = io('http://localhost:3690');
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    console.log("Received");
    if (request[0] == "updateStatus") {
        console.log(request[1])
        socket.send({"Title": Title, "Author": Author, "Album": Album})
    }
});

非常感谢@JakeHolzinger 帮我解决了这个问题。