Работа скрипта только в активной вкладке
Здравствуйте.
Есть небольшой скриптик, который отслеживает изменения в урл и обновляет страницу при изменении функции setCookie и getCookie соответственно задают и читают куки. В целом скрипт работает, и выполняет свои задачи на 110%, но как только открывается еще одна вкладка этого сайта, начинается постоянная перезагрузка страницы, что в целом естественно, скрипт отрабатывает как и должен. Как сделать что бы этот скрипт работал только в активной вкладке ? |
vasek123, во вкладках у вас должны иметь возможность находиться разные страницы, или при смене активной вкладки адрес новой должен становиться таким же как на той, с которой ушли?
|
Цитата:
Собственно поэтому сейчас и есть проблема, то что страницы начинают перезагружаться по очереди раз в секунду) |
Нет, я не о том. Если во вкладках нужны разные страницы, то вообще не нужно их запоминать в куки.
По сути если pathname изменилось, то страница какбэ и так перезагружена и никаких дополнительных скриптов не надо.) Если конечно не использовался history.pushState, но в таком случае и изменять надо кусок кода ответственный за это. |
Цитата:
а этим скриптом, мы раз в секунду сравниваем адрес из адресной строки и тот адрес что у нас в куках. а итоге у нас "как бы" работают кнопки браузера "вперед" и "назад". ну и вот, весь этот костыль работает если вкладка одна открыта, если вкладки две, то получается постоянно куки и текущий адрес не равны, и получаем перезагрузку. вот отсюда и мой вопрос, как делать проверку куки == урл, только на текущей странице. |
Это очень очень костыльное решение, делающее бессмысленным ajax подгрузку как таковую.
Для решения "проблемы" back/forward существует событие "popstate", которое происходит каждый раз при переходе по истории. Вам надо повесить обработчик на это событие, и в случае если пользователь возвращается назад просто грузить предыдущее состояние(в крайнем случае перезагружать станицу, но это не разумно). |
Цитата:
вопрос в другом, как это делать только в активной вкладке? отказываться от использования cookie конкретно в это случае смысла нет, так как они фигурируют и используются и в других местах. При чем те же самые. да и popstate не совсем кросбраузерно. |
пока остановился на document.hidden
|
"popstate" ровно настолько же кроссбраузерен, насколько "history.pushState". Это детали одной технологии. Нужны куки - пишите их, кто вам не даёт, а перезагружать постоянно страницу с секундными задержками, вместо реакции на конкретные действия пользователя - это просто бред, мягче, увы, не скажешь.
|
// В конец страницы var firstVisibility = true; // При первой загрузке страницы $(document).live("visibilitychange", function() { if (firstVisibility) { firstVisibility = false; return false } if (document.visibilityState == "visible") { //Тут наши функции при visible } }) |
Часовой пояс GMT +3, время: 18:19. |