как засечь повторное открытие страницы?
уважаемые, можно как-то засечь, что открывается дубль страницы, т.е. чтобы нельзя было 2 одинаковых страниц держать открытыми, либо предупреждать, что открыта вторая-дубль?
|
greenwar,
На сервере в php getenv('REMOTE_ADDR'); - дает ip клиента. Но для определения, есть ли дубль, необходимо хранить ip клиентов и как-то определять, закрыт ли предыдущий сеанс |
php тут не поможет, он не умеет с браузером контачить
JS надо, я думал про его window-ы или ещё как-то чтобы вкладки ловить и проверять, что такое же окно, с таким же идентификатором, не открыто в соседней вкладке |
greenwar,
А если я открыл второе окно в другом браузере (у меня установлено 4) |
greenwar,
Кидать отрытую ссылку в список в sesionStorage, при открытии новой страницы сверять с массивом уже вписанных ссылок |
Цитата:
как именно зафиксировать факт наличия 2х одновременно открытых? |
greenwar,
В хидере или в начале body ставите скрипт проверки наличия и добавки ссылки(если отсутствует) в ячейку (списком, к примеру через запятую, хеши обрубаете) sesionStorage Хоть по F5, хоть как - скрипт сработает |
не, я к тому, что по F5 получится же ложное срабатывание?
он же просто проверит, что такая ссылка уже есть в базе при этом страница таже самая, а не дубль |
greenwar,
Тогда вам нужно удаление ссылки из списка при закрытии страницы, по идее и по F5 наверно есть событие onunload предыдущей страницы (ну или нун подумать, пока нет мыслей) |
SessionStorage хранит данные для текущего окна. Это значит, что если вы закрыли окно, то все текущие данные, хранящиесе в SessionStorage теряются, даже если у вас открыто несколько окон с данным сайтом
|
Цитата:
|
<!DOCTYPE html> <html> <head> <script> var item = sessionStorage.getItem('key'); alert(item); sessionStorage.setItem('key', 'value'); </script> </head> <body> </body> </html> Попробуйте запустить эту программку, потом обновить страницу - выдаст value. Запустите в новой вкладке - выдаст null localStorage хранит лучше, но и не очищает при выходе |
так мне в новой вкладке то нужен value как раз, который определяется по уже открытой вкладке
|
Цитата:
|
Dilettante_Pro,
sessionStorage хранит данные пока открыта хоть одна вкладка с текущего домена |
Deff,
Попробуйте программку из поста 12 |
Dilettante_Pro,
Не тупите, речь идёт о двух(или более) одновременно открытых вкладках Одну закройте - на второй останется. А если закрыть обе - нам после этого и значения не надо, будет всё по новой |
Deff,
Прочтите внимательно пост 12 и подумайте. На второй вкладке value из первой недоступно - для второй первой вкладки как бы нет |
Цитата:
из localStorage можно, но localStorage живёт вечно и не обнуляется, а значит будет фейлить по F5 тому же так то можно было бы скомбинировать, что если localStorage === value && sessionStorage === value, значит это F5 но тогда будет фейлить при самом первом открытии окна |
greenwar,
Не понял, что дает их комбинация? Какие выводы можно сделать на основе их сочетаний? Если sessionStorage только свой, то он вообще не нужен, а localStorage не умирает |
localStorage без проблем изменяем значение и подписываемся на событие изменения значения
также можно решить с помощью workers |
Poznakomlus,
Проблема в том, чтобы он изменился при закрытии сессии |
Единственный выход - отключить на браузере все управляющие кнопки и завершать сессию кнопкой на странице с изменением localStorage. Но и при этом можно просто выключить компьютер...
|
я надеялся, что окну можно присвоить свой ID, как когда target='uniq_id', например
а потом просто смотреть в любой другой вкладке - не заряжен ли он в общем-то главное - определить, что такая страница уже открыта в соседней вкладке |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <script src="storage.js"></script> <script> var key = _storage('key'); _storage('key', !key); _storage().subscribe('key', function (value, e) { if(value){ _storage('key', !value); }else{ alert('Страница уже открыта'); } }); </script> </body> </html> Скрипт для работы с localStorage и парочка хороших примеров откройте копии страниц в броузере |
ух ты, работает )
вроде даже без нареканий спасибо! |
Dilettante_Pro,
Для особо тугодумных, Запустите первое окна, затем второе(Что Вы видите ? <script type="text/javascript">sessionStorage[1]=11111111;</script> <script type="text/javascript">alert(sessionStorage["1"])</script> C Одного домена sessionStorage читается на всех вкладках, пока хоть одна открыта |
Цитата:
|
Цитата:
А что именно работает? У меня пример Poznakomlus не хотел почему-то работать - выдавал Unexpected token на строку 119 storage.js : JSON.parse(value); Заменил в примере ключевое слово key на name - и все заработало, действительно, вроде четко отслеживает - в Chrome. В IE проблемы В Firefox срабатывает несколько странно. Firefox и Chrome друг друга не видят. |
Цитата:
открываешь вторую вкладку - кричит F5 - кричит короче реагирует на дубль и ни на что другое, что и требовалось (смотрю в FF и хроме) вкладки в разных браузерах пофигу, изначально то в одном будут открывать мне надо просто уведомление ставить, а не хаки обламывать ) |
greenwar,
F5 - кричит только при открытой второй вкладке(как и надо - обновление - не дубль) FF сам по себе отрабатывает нормально, но при открытом Chrome начинаются странности. IE после первого запуска теперь постоянно твердит об открытой странице. Opera - нормально |
Poznakomlus,
greenwar, Насчет проблемы с IE: window.addEventListener("storage", handle_storage, false); Функция обратного вызова handle_storage будет вызвана с объектом StorageEvent, за исключением Internet Explorer, где события хранятся в window.event. function handle_storage(e) { if (!e) { e = window.event; } } источник - http://htmlbook.ru/html5/storage |
я так понимаю, это Poznakomlus надо в свою библиотеку добавить?
|
Пофиксил.
localstorage Pабота с localstorage, подписка на события localstorage, хранение функций, массивов и объектов в localstorage |
Poznakomlus,
А вообще красивая технология - связь между окнами через событие storage! Респект! |
Часовой пояс GMT +3, время: 18:18. |