2016-08-10 14 views
0

WebExtensionsで安定しているはずのFirefox 48を使用しています。私はテストアプリを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

編集:私はFirefoxはbackgroundをサポートしていないことhereを読むためはまた、クロムと同じ拡張を試みたが、まだ接続破壊の問題が解消されません。

EDIT 2:アンドリューが言った通りはまだ動作しません、私のコードを更新:

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

は私もscripts行をコメントすることにより、上記のコードを試してみましたが、まだ動作しません。

<!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> 

bgp.html私は myclient.jsからの接続の作成を削除した場合、接続がまったく発生しません!つまり、bgp.htmlは動作しません。

答えて

1

バックグラウンドページとポップアップページの両方でmyclient.jsをロードしているようですが、そこにsocket.ioライブラリをロードしていないため、バックグラウンドページのバージョンは機能しません。ポップアップページはsocket.ioを読み込んでそこで動作しますが、ポップアップページが一時的で、ポップアップが解除されたときにアンロードされます(作成されたWebソケットなどはすべてクリーンアップされます)。

あなたは何をしようとしているのかはっきりとは言いませんが、1つの長寿命socket.io接続が必要な場合は、バックグラウンドページで適切な状態になっています。最も適切な修正は、実際のbackground.htmlページを作成し、<script>タグを追加してsocket.ioをロードし、バックグラウンドページからソケットを作成し、ポップアップページをバックグラウンドページと交換してソケットにアクセスすることです。 runtime.sendMessage()またはruntime.connect()としてください)。

また、私はここでfirefoxはバックグラウンドをサポートしていないが、接続の切断の問題は解決されないので、chromeと同じ拡張機能を試しました。

あなたがリンクしたドキュメントは、Chromeがサポートしているが、Firefoxではサポートしていない「背景」と呼ばれるアクセス許可に関するものです。 Firefoxはwebextensionsの背景ページをサポートしています。

元の質問の2回目の編集に応じて、近くになっていますが、背景ページのデフォルトのコンテンツセキュリティポリシーではインラインスクリプトが許可されません。あなたのコードを別のものに入れるならば。jsファイルとそれを参照する必要がありますタグから

+0

あなたの返信ありがとう、私は私の質問を更新しました。残念ながら接続は作成されません。 –

+0

解決策はありますか? –

+0

問題を示す拡張機能の完全なコードを投稿できますか? –

関連する問題