Просмотр полной версии : Работа скрипта только в активной вкладке
vasek123
01.11.2016, 23:18
Здравствуйте.
Есть небольшой скриптик, который отслеживает изменения в урл и обновляет страницу при изменении
функции setCookie и getCookie соответственно задают и читают куки.
В целом скрипт работает, и выполняет свои задачи на 110%, но как только открывается еще одна вкладка этого сайта, начинается постоянная перезагрузка страницы, что в целом естественно, скрипт отрабатывает как и должен.
Как сделать что бы этот скрипт работал только в активной вкладке ?
vasek123, во вкладках у вас должны иметь возможность находиться разные страницы, или при смене активной вкладки адрес новой должен становиться таким же как на той, с которой ушли?
vasek123
01.11.2016, 23:41
vasek123, во вкладках у вас должны иметь возможность находиться разные страницы, или при смене активной вкладки адрес новой должен становиться таким же как на той, с которой ушли?
во вкладках страницы разные, разные адреса.
Собственно поэтому сейчас и есть проблема, то что страницы начинают перезагружаться по очереди раз в секунду)
Нет, я не о том. Если во вкладках нужны разные страницы, то вообще не нужно их запоминать в куки.
По сути если pathname изменилось, то страница какбэ и так перезагружена и никаких дополнительных скриптов не надо.)
Если конечно не использовался history.pushState, но в таком случае и изменять надо кусок кода ответственный за это.
vasek123
02.11.2016, 00:14
Нет, я не о том. Если во вкладках нужны разные страницы, то вообще не нужно их запоминать в куки.
По сути если pathname изменилось, то страница какбэ и так перезагружена и никаких дополнительных скриптов не надо.)
Если конечно не использовался history.pushState, но в таком случае и изменять надо кусок кода ответственный за это.
тут суть всего этого в чем, есть сайт, страницы в нем грузятся аяксом, при этом в урл подставляется адрес(как раз таки используя history.pushState) той страницы которая загрузилась. ну и попутно обновляем куки на актуальный адрес. И как бы если человек будет копировать адрес текущей страницы из адресной строки браузера, адрес будет на нужную страницу. Но при таком подходе, если человек в браузере нажимает кнопку "назад", страница не подгружает предыдущую, просто меняется адрес и все.
а этим скриптом, мы раз в секунду сравниваем адрес из адресной строки и тот адрес что у нас в куках. а итоге у нас "как бы" работают кнопки браузера "вперед" и "назад".
ну и вот, весь этот костыль работает если вкладка одна открыта, если вкладки две, то получается постоянно куки и текущий адрес не равны, и получаем перезагрузку.
вот отсюда и мой вопрос, как делать проверку куки == урл, только на текущей странице.
Это очень очень костыльное решение, делающее бессмысленным ajax подгрузку как таковую.
Для решения "проблемы" back/forward существует событие "popstate (https://developer.mozilla.org/ru/docs/Web/Events/popstate)", которое происходит каждый раз при переходе по истории. Вам надо повесить обработчик на это событие, и в случае если пользователь возвращается назад просто грузить предыдущее состояние(в крайнем случае перезагружать станицу, но это не разумно).
vasek123
02.11.2016, 00:43
Это очень очень костыльное решение, делающее бессмысленным ajax подгрузку как таковую.
Для решения "проблемы" back/forward существует событие "popstate (https://developer.mozilla.org/ru/docs/Web/Events/popstate)", которое происходит каждый раз при переходе по истории. Вам надо повесить обработчик на это событие, и в случае если пользователь возвращается назад просто грузить предыдущее состояние(в крайнем случае перезагружать станицу, но это не разумно).
подгружать страницы при изменении ссылки аяксом можно и сейчас, заменив location.reload(); на функцию которая загружает мне страницы.
вопрос в другом, как это делать только в активной вкладке?
отказываться от использования cookie конкретно в это случае смысла нет, так как они фигурируют и используются и в других местах. При чем те же самые. да и popstate не совсем кросбраузерно.
vasek123
02.11.2016, 00:56
пока остановился на document.hidden
"popstate" ровно настолько же кроссбраузерен, насколько "history.pushState". Это детали одной технологии. Нужны куки - пишите их, кто вам не даёт, а перезагружать постоянно страницу с секундными задержками, вместо реакции на конкретные действия пользователя - это просто бред, мягче, увы, не скажешь.
// В конец страницы
var firstVisibility = true; // При первой загрузке страницы
$(document).live("visibilitychange", function() {
if (firstVisibility) {
firstVisibility = false;
return false
}
if (document.visibilityState == "visible") {
//Тут наши функции при visible
}
})
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot