Я пишу расширение Firefox, которое создает сервер сокетов, который будет выводить URL-адрес активной вкладки, когда клиент устанавливает соединение с ним.У меня есть следующий код в моем файле JavaScript:
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);
Как это, он работает для нескольких вкладок в одном окне.Если я открываю несколько окон, он игнорирует дополнительные окна.Я думаю, что это создает сокет сервера для каждого окна, но так как они используют один и тот же порт, дополнительные сокеты не инициализируются.Мне нужно создать сокет сервера, когда браузер запускается и продолжает работать, когда я закрываю окна (Mac OS X).Когда я закрываю окно, но Firefox продолжает работать, сокет закрывается, и мне нужно перезапустить Firefox, чтобы запустить его.Как мне это сделать?