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 帮我解决了这个问题。
我会尽量缩短。在过去的 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 帮我解决了这个问题。