01.11.2016, 23:18
|
Новичок на форуме
|
|
Регистрация: 07.10.2016
Сообщений: 7
|
|
Работа скрипта только в активной вкладке
Здравствуйте.
Есть небольшой скриптик, который отслеживает изменения в урл и обновляет страницу при изменении
функции setCookie и getCookie соответственно задают и читают куки.
В целом скрипт работает, и выполняет свои задачи на 110%, но как только открывается еще одна вкладка этого сайта, начинается постоянная перезагрузка страницы, что в целом естественно, скрипт отрабатывает как и должен.
Как сделать что бы этот скрипт работал только в активной вкладке ?
Последний раз редактировалось vasek123, 02.11.2016 в 10:24.
|
|
01.11.2016, 23:29
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
vasek123, во вкладках у вас должны иметь возможность находиться разные страницы, или при смене активной вкладки адрес новой должен становиться таким же как на той, с которой ушли?
__________________
29375, 35
|
|
01.11.2016, 23:41
|
Новичок на форуме
|
|
Регистрация: 07.10.2016
Сообщений: 7
|
|
Сообщение от Aetae
|
vasek123, во вкладках у вас должны иметь возможность находиться разные страницы, или при смене активной вкладки адрес новой должен становиться таким же как на той, с которой ушли?
|
во вкладках страницы разные, разные адреса.
Собственно поэтому сейчас и есть проблема, то что страницы начинают перезагружаться по очереди раз в секунду)
|
|
01.11.2016, 23:54
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
Нет, я не о том. Если во вкладках нужны разные страницы, то вообще не нужно их запоминать в куки.
По сути если pathname изменилось, то страница какбэ и так перезагружена и никаких дополнительных скриптов не надо.)
Если конечно не использовался history.pushState, но в таком случае и изменять надо кусок кода ответственный за это.
__________________
29375, 35
|
|
02.11.2016, 00:14
|
Новичок на форуме
|
|
Регистрация: 07.10.2016
Сообщений: 7
|
|
Сообщение от Aetae
|
Нет, я не о том. Если во вкладках нужны разные страницы, то вообще не нужно их запоминать в куки.
По сути если pathname изменилось, то страница какбэ и так перезагружена и никаких дополнительных скриптов не надо.)
Если конечно не использовался history.pushState, но в таком случае и изменять надо кусок кода ответственный за это.
|
тут суть всего этого в чем, есть сайт, страницы в нем грузятся аяксом, при этом в урл подставляется адрес(как раз таки используя history.pushState) той страницы которая загрузилась. ну и попутно обновляем куки на актуальный адрес. И как бы если человек будет копировать адрес текущей страницы из адресной строки браузера, адрес будет на нужную страницу. Но при таком подходе, если человек в браузере нажимает кнопку "назад", страница не подгружает предыдущую, просто меняется адрес и все.
а этим скриптом, мы раз в секунду сравниваем адрес из адресной строки и тот адрес что у нас в куках. а итоге у нас "как бы" работают кнопки браузера "вперед" и "назад".
ну и вот, весь этот костыль работает если вкладка одна открыта, если вкладки две, то получается постоянно куки и текущий адрес не равны, и получаем перезагрузку.
вот отсюда и мой вопрос, как делать проверку куки == урл, только на текущей странице.
|
|
02.11.2016, 00:26
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
Это очень очень костыльное решение, делающее бессмысленным ajax подгрузку как таковую.
Для решения "проблемы" back/forward существует событие " popstate", которое происходит каждый раз при переходе по истории. Вам надо повесить обработчик на это событие, и в случае если пользователь возвращается назад просто грузить предыдущее состояние(в крайнем случае перезагружать станицу, но это не разумно).
__________________
29375, 35
Последний раз редактировалось Aetae, 02.11.2016 в 00:31.
|
|
02.11.2016, 00:43
|
Новичок на форуме
|
|
Регистрация: 07.10.2016
Сообщений: 7
|
|
Сообщение от Aetae
|
Это очень очень костыльное решение, делающее бессмысленным ajax подгрузку как таковую.
Для решения "проблемы" back/forward существует событие "popstate", которое происходит каждый раз при переходе по истории. Вам надо повесить обработчик на это событие, и в случае если пользователь возвращается назад просто грузить предыдущее состояние(в крайнем случае перезагружать станицу, но это не разумно).
|
подгружать страницы при изменении ссылки аяксом можно и сейчас, заменив location.reload(); на функцию которая загружает мне страницы.
вопрос в другом, как это делать только в активной вкладке?
отказываться от использования cookie конкретно в это случае смысла нет, так как они фигурируют и используются и в других местах. При чем те же самые. да и popstate не совсем кросбраузерно.
|
|
02.11.2016, 00:56
|
Новичок на форуме
|
|
Регистрация: 07.10.2016
Сообщений: 7
|
|
пока остановился на document.hidden
|
|
02.11.2016, 01:03
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,588
|
|
"popstate" ровно настолько же кроссбраузерен, насколько "history.pushState". Это детали одной технологии. Нужны куки - пишите их, кто вам не даёт, а перезагружать постоянно страницу с секундными задержками, вместо реакции на конкретные действия пользователя - это просто бред, мягче, увы, не скажешь.
__________________
29375, 35
|
|
02.11.2016, 01:06
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
// В конец страницы
var firstVisibility = true; // При первой загрузке страницы
$(document).live("visibilitychange", function() {
if (firstVisibility) {
firstVisibility = false;
return false
}
if (document.visibilityState == "visible") {
//Тут наши функции при visible
}
})
Последний раз редактировалось Deff, 02.11.2016 в 03:03.
|
|
|
|