ich eine Firefox-Erweiterung zu schreiben, die einen Socket-Server erstellt, die folgende Ausgabe der aktiven Registerkarte URL, wenn ein Client eine Verbindung mit ihr macht. Ich habe den folgenden Code in meiner Javascript-Datei:Hilfe bei der Firefox-Erweiterung in mehreren Fenstern
var serverSocket;
function startServer()
{
var listener =
{
onSocketAccepted : function(socket, transport)
{
try {
var outputString = gBrowser.currentURI.spec + "\n";
var stream = transport.openOutputStream(0,0,0);
stream.write(outputString,outputString.length);
stream.close();
} catch(ex2){ dump("::"+ex2); }
},
onStopListening : function(socket, status){}
};
try {
serverSocket = Components.classes["@mozilla.org/network/server-socket;1"]
.createInstance(Components.interfaces.nsIServerSocket);
serverSocket.init(7055,true,-1);
serverSocket.asyncListen(listener);
} catch(ex){ dump(ex); }
document.getElementById("status").value = "Started";
}
function stopServer()
{
if (serverSocket)
serverSocket.close();
}
window.addEventListener("load", function() { startServer(); }, false);
window.addEventListener("unload", function() { stopServer(); }, false);
Wie es ist, funktioniert es für mehrere Registerkarten in einem einzigen Fenster. Wenn ich mehrere Fenster öffne, ignoriert es die zusätzlichen Fenster. Ich denke, es ist ein Server-Socket für jedes Fenster erstellen, aber da sie den gleichen Port verwenden, können die zusätzlichen Sockets nicht initialisiert werden. Ich brauche es, um einen Server-Socket zu erstellen, wenn der Browser gestartet wird und weiter ausgeführt wird, wenn ich die Fenster schließe (Mac OS X). So wie es ist, wenn ich ein Fenster schließe, aber Firefox läuft, schließt sich der Socket und ich muss Firefox neu starten, um es zum Laufen zu bringen. Wie gehe ich da vor?
Sie sollten posten Sie Ihre XUL-Code, so können wir sehen, wie Ihr Overlay funktioniert. – jmort253