Javascript chrome扩展在后台页面和内容脚本下使用相同的socket.io连接
我正在用socket.io做一个chrome扩展,我有一个内容脚本,可以一直连接到服务器进行实时聊天,但我也想在后台页面从服务器获取一些信息。它可以像这样单独工作 在内容脚本中Javascript chrome扩展在后台页面和内容脚本下使用相同的socket.io连接,javascript,google-chrome-extension,socket.io,Javascript,Google Chrome Extension,Socket.io,我正在用socket.io做一个chrome扩展,我有一个内容脚本,可以一直连接到服务器进行实时聊天,但我也想在后台页面从服务器获取一些信息。它可以像这样单独工作 在内容脚本中 var socket = io.connect('http://localhost:3700'); socket.on('dosomething',function(){ console.log("test"); }); 在背景页中 var socket = io.connect('http://localhost
var socket = io.connect('http://localhost:3700');
socket.on('dosomething',function(){
console.log("test");
});
在背景页中
var socket = io.connect('http://localhost:3700');
socket.on('dosomething',function(){
console.log("test");
});
但是,当服务器有类似的功能时,是否有任何方法只能连接一次
app.jssocket.emit('dosomething')代码>
并将触发背景页或内容脚本,其中包含socket.on('dosomething')
我尝试使用以下命令将后台页面建立的套接字发送到内容脚本
chrome.runtime.sendMessage
和chrome.runtime.onMessage.addListener
但它不起作用:(
有什么解决办法吗
非常感谢!我尝试在内容脚本中编写一个socket.io客户端,当socket.io服务器发送“hello”请求时,它会将消息发送到后台页面
内容脚本:
var socket = io.connect('http://localhost:1337');
socket.on("hello",function(data){
console.log(data.text);
chrome.runtime.sendMessage({msg:"socket",text:data.text},function(response){});
});
chrome.runtime.onMessage.addListener(
function(request,sender,senderResponse){
if(request.msg==="socket"){
console.log("receive from socket server: "+request.text);
}
}
);
var app = require('http').createServer(handler).listen(1337);
var io = require('socket.io').listen(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){
socket.emit('hello',{text:"node!"});
});
背景页面:
var socket = io.connect('http://localhost:1337');
socket.on("hello",function(data){
console.log(data.text);
chrome.runtime.sendMessage({msg:"socket",text:data.text},function(response){});
});
chrome.runtime.onMessage.addListener(
function(request,sender,senderResponse){
if(request.msg==="socket"){
console.log("receive from socket server: "+request.text);
}
}
);
var app = require('http').createServer(handler).listen(1337);
var io = require('socket.io').listen(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){
socket.emit('hello',{text:"node!"});
});
服务器端:
var socket = io.connect('http://localhost:1337');
socket.on("hello",function(data){
console.log(data.text);
chrome.runtime.sendMessage({msg:"socket",text:data.text},function(response){});
});
chrome.runtime.onMessage.addListener(
function(request,sender,senderResponse){
if(request.msg==="socket"){
console.log("receive from socket server: "+request.text);
}
}
);
var app = require('http').createServer(handler).listen(1337);
var io = require('socket.io').listen(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){
socket.emit('hello',{text:"node!"});
});
后台控制台屏幕截图:
var socket = io.connect('http://localhost:1337');
socket.on("hello",function(data){
console.log(data.text);
chrome.runtime.sendMessage({msg:"socket",text:data.text},function(response){});
});
chrome.runtime.onMessage.addListener(
function(request,sender,senderResponse){
if(request.msg==="socket"){
console.log("receive from socket server: "+request.text);
}
}
);
var app = require('http').createServer(handler).listen(1337);
var io = require('socket.io').listen(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){
socket.emit('hello',{text:"node!"});
});
希望这对你有帮助