Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа скрипта только в активной вкладке (https://javascript.ru/forum/misc/65673-rabota-skripta-tolko-v-aktivnojj-vkladke.html)

vasek123 01.11.2016 23:18

Работа скрипта только в активной вкладке
 
Здравствуйте.
Есть небольшой скриптик, который отслеживает изменения в урл и обновляет страницу при изменении


функции setCookie и getCookie соответственно задают и читают куки.
В целом скрипт работает, и выполняет свои задачи на 110%, но как только открывается еще одна вкладка этого сайта, начинается постоянная перезагрузка страницы, что в целом естественно, скрипт отрабатывает как и должен.

Как сделать что бы этот скрипт работал только в активной вкладке ?

Aetae 01.11.2016 23:29

vasek123, во вкладках у вас должны иметь возможность находиться разные страницы, или при смене активной вкладки адрес новой должен становиться таким же как на той, с которой ушли?

vasek123 01.11.2016 23:41

Цитата:

Сообщение от Aetae (Сообщение 433747)
vasek123, во вкладках у вас должны иметь возможность находиться разные страницы, или при смене активной вкладки адрес новой должен становиться таким же как на той, с которой ушли?

во вкладках страницы разные, разные адреса.

Собственно поэтому сейчас и есть проблема, то что страницы начинают перезагружаться по очереди раз в секунду)

Aetae 01.11.2016 23:54

Нет, я не о том. Если во вкладках нужны разные страницы, то вообще не нужно их запоминать в куки.

По сути если pathname изменилось, то страница какбэ и так перезагружена и никаких дополнительных скриптов не надо.)
Если конечно не использовался history.pushState, но в таком случае и изменять надо кусок кода ответственный за это.

vasek123 02.11.2016 00:14

Цитата:

Сообщение от Aetae (Сообщение 433751)
Нет, я не о том. Если во вкладках нужны разные страницы, то вообще не нужно их запоминать в куки.

По сути если pathname изменилось, то страница какбэ и так перезагружена и никаких дополнительных скриптов не надо.)
Если конечно не использовался history.pushState, но в таком случае и изменять надо кусок кода ответственный за это.

тут суть всего этого в чем, есть сайт, страницы в нем грузятся аяксом, при этом в урл подставляется адрес(как раз таки используя history.pushState) той страницы которая загрузилась. ну и попутно обновляем куки на актуальный адрес. И как бы если человек будет копировать адрес текущей страницы из адресной строки браузера, адрес будет на нужную страницу. Но при таком подходе, если человек в браузере нажимает кнопку "назад", страница не подгружает предыдущую, просто меняется адрес и все.

а этим скриптом, мы раз в секунду сравниваем адрес из адресной строки и тот адрес что у нас в куках. а итоге у нас "как бы" работают кнопки браузера "вперед" и "назад".

ну и вот, весь этот костыль работает если вкладка одна открыта, если вкладки две, то получается постоянно куки и текущий адрес не равны, и получаем перезагрузку.

вот отсюда и мой вопрос, как делать проверку куки == урл, только на текущей странице.

Aetae 02.11.2016 00:26

Это очень очень костыльное решение, делающее бессмысленным ajax подгрузку как таковую.
Для решения "проблемы" back/forward существует событие "popstate", которое происходит каждый раз при переходе по истории. Вам надо повесить обработчик на это событие, и в случае если пользователь возвращается назад просто грузить предыдущее состояние(в крайнем случае перезагружать станицу, но это не разумно).

vasek123 02.11.2016 00:43

Цитата:

Сообщение от Aetae (Сообщение 433755)
Это очень очень костыльное решение, делающее бессмысленным ajax подгрузку как таковую.
Для решения "проблемы" back/forward существует событие "popstate", которое происходит каждый раз при переходе по истории. Вам надо повесить обработчик на это событие, и в случае если пользователь возвращается назад просто грузить предыдущее состояние(в крайнем случае перезагружать станицу, но это не разумно).

подгружать страницы при изменении ссылки аяксом можно и сейчас, заменив location.reload(); на функцию которая загружает мне страницы.

вопрос в другом, как это делать только в активной вкладке?

отказываться от использования cookie конкретно в это случае смысла нет, так как они фигурируют и используются и в других местах. При чем те же самые. да и popstate не совсем кросбраузерно.

vasek123 02.11.2016 00:56

пока остановился на document.hidden

Aetae 02.11.2016 01:03

"popstate" ровно настолько же кроссбраузерен, насколько "history.pushState". Это детали одной технологии. Нужны куки - пишите их, кто вам не даёт, а перезагружать постоянно страницу с секундными задержками, вместо реакции на конкретные действия пользователя - это просто бред, мягче, увы, не скажешь.

Deff 02.11.2016 01:06

// В конец страницы
var firstVisibility = true; // При первой загрузке страницы
$(document).live("visibilitychange", function() {
				if (firstVisibility) {
					firstVisibility = false;
					return false
				}
				if (document.visibilityState == "visible") {
 					//Тут наши функции при visible
				}
})


Часовой пояс GMT +3, время: 18:19.