2016-08-10 34 views
0

我正在使用Firefox 48,它应该对WebExtensions稳定。我已将我的测试应用程序与Socket.IO连接起来。一旦关闭弹出窗口,socket.IO连接就会中断。下面是代码:弹出关闭时Socket.IO连接断开

的manifest.json

{ 
    "manifest_version": 2, 
    "name": "myapp", 
    "version": "1.0", 
    "browser_action": { 
     "default_icon": { 
      "96": "button/icon.png" 
     }, 
    "default_title": "myapp", 
    "default_popup": "popup/main.html" 
    } 
    "background": { 
     "scripts": ["myclient.js"] 
    } 
} 

main.html中

<body> 
<script src="/scripts/socket.io.js"></script> 
<script src="/scripts/jquery-2.2.4.min.js"></script> 
<script src="/myclient.js"></script> 
</body> 

myclient.js

var address = "localhost"; 
var client = io("http://" + address + ":17001/"); 
client.on("message", function() { 
    $("#test").text("message"); 
}); 

我的服务器的NodeJS代码

console.log("Server started"); 
var io = require("socket.io")(17001); 
io.on("connection", function (socket) { 
    var address = socket.request.connection.remoteAddress; 
    console.log("Someone joined. Socket ID:", socket.id, address); 
    io.emit("message"); 
    socket.on("disconnect", function() { 
     console.log("Someone disconnected!"); 
    }); 
}); 

如何阻止连接断开连接? TIA

编辑:也试图与铬相同的扩展,因为我读here Firefox不支持background,但连接断裂的问题仍然存在。

编辑2:更新我的代码按安德鲁说,仍然不能正常工作:

"background": { 
    "scripts": ["myclient.js", "/scripts/socket.io.js", "/scripts/jquery-2.2.4.min.js"], 
    "page": "bgp.html" 
} 

我也通过注释scripts线上尝试了上面的代码,仍然不能正常工作。
bgp.html

<!DOCTYPE html> 
<html lang="en"> 
<body> 
<script src="/scripts/socket.io.js"></script> 
<script> 
    var address = "localhost"; 
    var client = io("http://" + address + ":17001/"); 
</script> 
</body> 
</html> 

如果我从myclient.js删除连接的创建,连接不发生在所有!这意味着bgp.html不起作用。

回答

1

它看起来像你在你的背景页面和你的弹出页面中加载myclient.js,但在后台页面版本不会工作,因为你没有加载socket.io库。弹出页面不会加载socket.io,所以它在那里工作,但弹出页面是短暂的,当弹出窗口被解除时,它被卸载(并且任何创建的websocket等被清除)。

你没有明确说明你想要做什么,但是如果你想要一个单一的长寿命的socket.io连接,你就可以在背景页面的正确轨道上。最合适的修复方法是创建一个实际的background.html页面并添加<script>标签来加载socket.io,然后从后台页面创建您的套接字并让弹出页面与后台页面交换消息以访问套接字(您用runtime.sendMessage()runtime.connect())。

也试过相同的扩展与铬,因为我在这里读到Firefox不支持背景,但连接中断的问题仍然存在。

链接到的文档是关于Chrome支持但Firefox不支持的称为“背景”的权限。 Firefox确实支持webextensions中的后台页面。

作为对原始问题的第二次编辑的回应,您将越来越近,但后台页面的默认内容安全策略不允许使用内联脚本。如果你把你的代码放到一个单独的。js文件并从<script>标记引用它应该工作

+0

谢谢你的回复,我更新了我的问题。不幸的是,连接不会被创建。 –

+0

你有什么解决方案吗? –

+0

你能发布展示问题的扩展的完整代码吗? –