3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54

Инициализация окон и вкладок браузера

04.07.2013, 13:52. Показов 2609. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Товарищи, выручайте! Есть у меня одно приложение в WEB на базе XMPP + Strophe. Проще говоря чат, соединение с сервером происходит при помощи Strophe (JS библиотеки), то есть на стороне клиента. Данная библиотека позволяет перехватывать соединение уже установленное в начале. То есть я устанавливаю соединение один раз, сохраняю идентификатор сессии в cookie и на других страницах перехватываю его той же библиотекой. Принцип, я несколько упростил для понимания. Этот способ отлично работает, до тех пор пока пользователь не пожелает открыть мое же приложение скажем во второй вкладке брауезера. В этом случае у меня получается два идентичных соединения, что неприемлемо для сервера XMPP и он разумеется обрывает его, в итоге обе вкладки остаются без соединения.

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

Отсюда главный вопрос: можно ли каким то образом используя cookie, jquery и т.п. точно определить является ли данная вкладка отличной от основной? То есть, я могу однозначно в коде выяснить является ли данное окно дополнительным?

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

Добавлено через 2 часа 29 минут
Короче говоря, пока придумал только один способ: хранить параметры сессии в window.name значение этого свойства не меняется при перезагрузке страницы. Мне необходимо хранить всего 4 параметра, можно хранить в виде строки, а для удобного изменения конвертировать в JSON, менять и обратно конвертировав в строку сохранять в window.name.

Пока это единственное решение, есть еще идеи ребята?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.07.2013, 13:52
Ответы с готовыми решениями:

Как получить массив вкладок одного из окон браузера Google Chrome?
Привет. Вот пытаюсь написать расширение для браузера, но никак не могу получить массив вкладок. Давайте поясню, как у меня сделано, ибо...

Взаимодействие окон/вкладок
Доброго времени суток! var playedMusic= null, music = document.getElementsByTagName('audio'); for (var k in music) { ...

Самостоятельное открывание окон и вкладок браузера с рекламой
Самостоятельное открывание окон и вкладок браузера с рекламой вот лог

8
33 / 33 / 6
Регистрация: 14.03.2013
Сообщений: 89
04.07.2013, 14:56
А если хранить флаг в localstorage?
0
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54
04.07.2013, 15:08  [ТС]
alokazay, ну насколько я понимаю localstorage не является кроссбраузерным решением, а мне нужно что бы это работало начиная с IE6, будь он не ладен.

Добавлено через 8 минут
С другой стороны, что мне мешает использовать localstorage во всех нормальных браузерах, кроме чертового IE. Он пусть хранить в widnow.name. На сколько я понимаю кроссбраузерного window.localstorage нет и быть не может, потому что если у IE такого свойства у window нет, то его просто нет, так?
0
33 / 33 / 6
Регистрация: 14.03.2013
Сообщений: 89
04.07.2013, 15:14
localstorage поддерживает ИЕ 8+, сколько у вас посетителей с ИЕ 6 ? 1% ? + еще пол процента ИЕ 7 ? Так что вам решать переходить на новый технологии или нет. да и куки можно использовать без проблем.
0
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54
04.07.2013, 15:30  [ТС]
alokazay, сейчас проверил. localstorage, так же как и cookie не подходит. Я сперва подумал localstorage уникально для каждого окна, но localstorage, так же как и cookie общее для всей сессии браузера в рамках данного домена.

Алгоритм такой: я должен проверить значение хранилища (я пока предполагаю использовать window.name), если там есть данные (значит сессия) в рамках этого окна уже была создана, значит я ее перехватываю, если же данных нет, значит это новое окно\вкладка, значит нужно создать новое подключение и индентификатор сессии поместить в хранилище (window.name), для того, что бы не создавать новых подключений, если пользователь в рамках этого окна\вкладки будет перемещаться по ссылкам.
0
33 / 33 / 6
Регистрация: 14.03.2013
Сообщений: 89
04.07.2013, 16:14
JavaScript
1
2
3
4
5
6
  window.onload = function (){
      .....
    }
    window.onbeforeunload = function (){
        ....
    }
Можно часть отловить вот так
0
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54
04.07.2013, 16:17  [ТС]
alokazay, я не совсем понял что имеется ввиду. Подключение отключение от XMPP во время смены страниц? Таким образом у меня реализовано сейчас, но этот временный, аварийный вариант требует нормализации и поэтому я тут. Потому что подключение\отключение нагружает XMPP.

Ну а если я не правильно понял ваше предложение, тогда объясните подробнее ход вашей мысли
0
33 / 33 / 6
Регистрация: 14.03.2013
Сообщений: 89
04.07.2013, 16:26
если пользователь в первый раз зашел записываем в переменную +1, если покидает страницу - 1, получается если вкладок больше чем 0 значит вы понимаете что у вас открылась еще одна вкладка .. ну это если я правильно понял ход ваших мыслей
0
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54
04.07.2013, 16:40  [ТС]
alokazay, вы правильно меня поняли, но в рамках поставленного мною вопроса, а я не посвящал в детали работы XMPP. Дело в том, что там не так все просто. У меня есть три параметра сессии, один из них должен увеличиваться каждый раз при ответе от XMPP, это условие безопасности. Поэтому мне не так важно понять сколько новых вкладок у меня открыто. Мне гораздо важнее в рамках каждой вкладки иметь хранилище, которое не будет сбрасываться при перезагрузке страницы. И это хранилище должно быть уникальным в рамках данного окна\вкладки Например:
Вкладка 1:
JavaScript
1
{sid: 'e13dasdsa', rid:12313412, resource:'WQStRd'}
Если перезагрузить данное окно, данные выше которые хранятся в window.name будут сохранены (они не исчезнут) в этом особенность работы свойства window.name. То есть, если я, в рамках данного окна (Вкладка 1) буду переходить по ссылкам, значения заданные выше, не исчезнут, они будут существовать до тех пор, пока я не уничтожу данную вкладку. Что бы перехватить подключение к XMPP, вместо нового подключения, при загрузке страницы, я проверяю наличие этих параметров, если они есть - я перехватываю соединение, без переподключения. А если данных нет, пусто - задаю новые параметры и осуществляю подключение:
Вкладка 2
JavaScript
1
{sid: 'z14dljksw', rid:42355516, resource:'ADSsRq'}
Теперь если я перезагружу страницу или начну лазить по ссылкам вкладки 2, скрипт проверит свойство window.name указанные выше параметры, обнаружит их и с их помощью перехватит подключение. Таким образом, я имею одно уникальное подключение в рамках каждого окна.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.07.2013, 16:40
Помогаю со студенческими работами здесь

Восстановление вкладок Chrome двух окон
Такая проблема: было открыто 2 окна Хрома, сначала закрыл основное с кучей давно открытых вкладок, а оказалось, что было и второе окно с...

Самопроизвольное открытие вкладок и окон с рекламой
Добрый вечер! Помимо всплывающих вкладок и окон, возникла проблема самопроизвольной смены домашней страницы в браузере (Chrome), как...

Открытие окон/вкладок с рекламой в Хроме
Стали открываться всплывающие окна/вкладки с рекламой в Хроме. Несмотря на то что установлен AdBlock

Открытие/закрытие вкладок браузера
Добрый день. Нужен совет, может кто подскажет реально ли сделать как мне нужно. Есть на моем сайте страница с формой <form...

Произвольное открытие браузера и вкладок с рекламой
Браузер Опера, винда ХР. Почистил реестр, поставил AdBlock и Ad Muncher. Проганял антивирусом Avast. Удалил все расширения в браузере....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru