我会尽量使其简短。在过去的 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 帮助我解决这个问题。
关于javascript - Chrome 扩展套接字与外部脚本通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67218288/