0

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

清单.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>

我的客户端.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

编辑:也尝试了与 chrome 相同的扩展,因为我在这里读到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 不起作用。

4

1 回答 1

1

看起来您在后台页面和弹出页面中都加载了 myclient.js,但是后台页面中的版本将不起作用,因为您没有在那里加载 socket.io 库。弹出页面确实加载了 socket.io,因此它在那里工作,但弹出页面是短暂的,当弹出窗口被解除时,它被卸载(并且创建的任何 websocket 等都被清理)。

您没有确切说明您要做什么,但是如果您想要一个长期存在的 socket.io 连接,那么您在后台页面的正确轨道上。最方便的解决方法是创建一个实际的 background.html 页面并添加<script>标签以加载 socket.io,然后从后台页面创建您的套接字并让弹出页面与后台页面交换消息以访问套接字(您这样做使用runtime.sendMessage()runtime.connect())。

还尝试了与 chrome 相同的扩展,因为我在这里读到 firefox 不支持背景,但连接中断的问题仍然存在。

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

作为对原始问题的第二次编辑的回应,您已经接近但后台页面的默认内容安全策略不允许内联脚本。如果您将代码放入单独的 .js 文件并从<script>标签中引用它,它应该可以工作

于 2016-08-10T23:14:29.147 回答