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

标签 javascript node.js sockets google-chrome-extension

我会尽量使其简短。在过去的 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/

相关文章:

javascript - 如何将文件从 public 复制到 dist?

javascript - 在使用 create-react-app 的 React 应用程序中填充 ES6 功能的最佳方法

javascript - 数据字符串如何包裹在对象内部?工作到 html 显示

java - ObjectOutputStream 不发送数据(服务器卡在 socket.accept() 处)

java - 使用 TCP 套接字从 Android 设备向 ESP8266 Wi-Fi 芯片发送数据

java - 帮助在 Tapestry5 中创建 JavaScript 混合?

javascript - 错误 : Cannot find module '@discordjs/opus'

unicode - node.js Nerve 框架 unicode 响应

javascript - 如何 sinon spy 模块导出实用函数

javascript - 如何使用vuejs制作闹钟声音