Javascript 在FireFox插件中使用websocket立即断开连接

Javascript 在FireFox插件中使用websocket立即断开连接,javascript,firefox,websocket,firefox-addon,firefox-addon-sdk,Javascript,Firefox,Websocket,Firefox Addon,Firefox Addon Sdk,我一直在研究与运行WebSocket服务器的本地应用程序交互的浏览器扩展。 Safari和Chrome扩展非常容易实现,在经历了一些令人头痛的FF开发之后,我认为我能够像在其他浏览器中一样实现WebSocket。但是我有一些问题 我知道我不能直接在“main”js文件中创建WebSocket,因此尝试使用我在internet上找到的解决方法: 使用页面辅助程序作为主代码和WebSocket代码之间的代理。当我实现这段代码时,我的WebSocket连接立即出现错误w/{“isTrusted”:tr

我一直在研究与运行WebSocket服务器的本地应用程序交互的浏览器扩展。 Safari和Chrome扩展非常容易实现,在经历了一些令人头痛的FF开发之后,我认为我能够像在其他浏览器中一样实现WebSocket。但是我有一些问题

我知道我不能直接在“main”js文件中创建WebSocket,因此尝试使用我在internet上找到的解决方法:

使用页面辅助程序作为主代码和WebSocket代码之间的代理。当我实现这段代码时,我的WebSocket连接立即出现错误w/{“isTrusted”:true}作为唯一的信息

我还尝试使用hiddenframe,因为这似乎是1Password在其FF插件中处理websocket通信的方式,但这也会导致相同的即时错误

当我在我的普通FF实例中打开一个websocket连接到我的服务器时,它连接得很好,但到目前为止,我还没有从插件中得到任何工作

使pageWorker具有:

var pw = pageWorker.Page({
    contentUrl: self.data.url('com.html'),
    contentScriptFile: self.data.url('com.js')
})
com.html:

<!DOCTYPE HTML>
<html>
<body>
</body>
</html>
运行此命令将导致:

console.log: xxx: [com.js] launchCom Called
console.log: xxx: [com.js] Detected Websocket in Window, attempting to open...
console.log: xxx: [com.js] ws error: {"isTrusted":true}
console.log: xxx: [com.js] ws closed. evt: {"isTrusted":true}

任何帮助都将不胜感激

我也遇到了类似的情况,因为websocket不能直接在main.js中实现。我也做了和你们一样的事情,可能是服务器拒绝连接。我的代码片段如下所示:

main.js

var wsWorker = require('sdk/page-worker').Page({
  contentURL: "./firefoxScript/webSocket.html",
  contentScriptFile : ["./firefoxScript/webSocket.js"]
});
webSocket.html

<html>
<head>        
    <title></title>
</head>
<body>
</body>
</html>

这对我来说非常好。

我已经解决了这个问题:

我在OSX应用程序中使用服务器,PocketSocket和FF似乎存在问题

更改PocketSocket的PSWebSocketDriver.m第87行代码后

[[headers[@"Connection"] lowercaseString] isEqualToString:@"upgrade"]

每, 我能够使用原始代码从FF插件打开WebSocket连接,但服务器在消息上出错

在about:config中将network.websocket.extensions.permessage-deflate设置为false允许发送消息,因此我添加了

 require("sdk/preferences/service").set("network.websocket.extensions.permessage-deflate", false);
到我的main.js,一切都正常

PocketSocket代码的微小变化对与其他WebSocket客户端交互的服务器没有任何影响

[[headers[@"Connection"] lowercaseString] isEqualToString:@"upgrade"]
[[headers[@"Connection"] lowercaseString] containsString:@"upgrade"]
 require("sdk/preferences/service").set("network.websocket.extensions.permessage-deflate", false);