Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54

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

04.07.2013, 13:52. Показов 2590. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru