Использование JavaScript / ActionScript для мониторинга окон браузера из того же домена - PullRequest
1 голос
/ 23 июня 2009

Моя веб-страница загружает фоновую вспышку, которая подключается к серверу через сокет. Если пользователь откроет несколько окон / вкладок моего сайта, сервер получит несколько сокет-соединений. Любая идея, как убедиться, что только один сокет подключен от одного и того же пользователя и того же браузера?

Я думаю об использовании Javascript для мониторинга события закрытия окна, если окно, которое было подключено к серверу, закрывается, одно из других окон попытается подключиться к серверу. Но я не могу найти способ послушать это событие.

Я тоже думал о FlashConnection, но не могу найти способ назначить уникальные имена подключений и сообщить другим Flashes.

Ответы [ 3 ]

1 голос
/ 23 июня 2009

Вы можете сделать это из Flash, используя LocalConnection.

Когда загружается фильм, попробуйте отправить тестовое сообщение на какой-нибудь идентификатор LocalConnection. Если это не удается, то соединение не открывается, и в этом случае вы открываете его для прослушивания команд и подключаетесь к серверу через сокет.

Если это удастся, значит, уже запущен SWF, подключенный к серверу. Вы можете отправлять любые запросы сервера, которые SWF получает через LocalConnection, на тот, который подключен к серверу.

Если вам нужно получить ответы обратно, вам может потребоваться, чтобы другие SWF-файлы открывали свои локальные соединения (произвольный идентификатор) и регистрировали их в SWF-файле, подключенном к серверу.

Когда подключенный SWF-файл отключается (окно закрывается), все отправления на это LocalConnection должны завершаться сбоем. В этом случае ваши другие SWF-файлы начнут получать ошибки. Один из них должен будет открыть это соединение и стать «основным» SWF (первым, чтобы успешно открыть соединение).

Жизненный цикл был бы немного странным, и, вероятно, есть много угловых случаев, которые вам нужно будет обработать, чтобы убедиться, что он остается устойчивым, но это вариант. Однако я заметил, что LocalConnection может стать ненадежным при увеличении числа соединений, поэтому вам, вероятно, будет лучше найти другое решение.

0 голосов
/ 23 июня 2009

Вы можете контролировать только те окна, которые открываете сами. На стороне клиента нет способа управления другими окнами / вкладками (и на стороне сервера нет способа их различать).

0 голосов
/ 23 июня 2009

Событие, которое вы ищете, называется unload. Предполагая, что вы используете window.open для запуска окна, вы можете сделать это: -

var win = window.open(url)
if (win.attachEvent)
    win.attachEvent("onunload", function() { // stuff when window closes });
else
    win.addEventListener("unload", function() { // stuff when window closes }, true);

Однако, исходя из горького опыта, полагаться на события выгрузки можно несколько ненадежно.

Редактировать

Если пользователь открывает эти окна своими собственными средствами, то ответ прост: нет, это невозможно сделать.

...