2016-08-10 38 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

你能發佈展示問題的擴展的完整代碼嗎? –