Как получить целевой URL с помощью jQuery? - PullRequest
3 голосов
/ 06 мая 2010

На моей веб-странице есть фрагмент обратного отсчета, который считывает оставшееся время из скрытого поля. Он отсчитывает от 300 до 0 с шагом 1 секунда и, соответственно, обновляет скрытое поле. Когда я перезагружаю страницу, браузер передает старое значение скрытого поля, а не извлекает его с сервера.

Фрагмент:

Мне нужно получить целевой URL страницы в блоке прослушивателя событий, например:

$ (окно) .unload (function () {
оповещения (window.location.destination); });

Конечно, я составил часть «назначения». Что мне действительно нужно, так это обнаружить перезагрузку и прикрепить параметр хеша к URL, чтобы предотвратить кеширование.

1 Ответ

2 голосов
/ 06 мая 2010

Невозможно получить URL-адрес страницы, на которую собирается пользователь, в функции unload или вообще (в некоторых случаях это может привести к нарушению конфиденциальности). И идентификатор фрагмента (хеш) в URL не помешает кешированию; изменение его даже не перезагрузит страницу. Для кэшбастера вы должны будете написать часть URL ?query, что вы можете сделать, например, через. location.search= '?'+Math.random();.

Но ничего из этого не является хорошей идеей. Поведение, при котором браузеры «запоминают» предыдущее значение формы при перезагрузке или переходе назад / вперед на страницу, нежелательно, поэтому лучше всего вообще не использовать поле формы. Пусть сценарий запишет данные в другой части DOM:

<span id="counter" class="remaining-300"></span>

и прочитайте это из .className элемента span в скрипте, или просто напишите переменную прямо в JS:

<span id="counter"></span>
<script type="text/javascript">
    var remaining= 300;
</script>

Это приведет к сбросу обратного отсчета до 300 секунд при каждой загрузке страницы.

Возможно, вам также придется подумать о «bfcache», который во многих современных браузерах сохраняет вашу исходную страницу - включая все содержимое и состояние скрипта на ней - когда пользователь уходит с экрана, затем возвращает ее без перезагрузки при нажатии 'Назад'.

В настоящее время будет продолжаться отсчет времени, но он не будет отмечен, пока страница скрывалась, поэтому у вас будет столько же времени, сколько у вас было при выходе. Если это не то, что вы хотите, вы можете попытаться установить тайм-аут крайнего срока независимо от интервала тикера, чтобы всегда срабатывать в ожидаемое время перезагрузки. Или, в крайнем случае, и, как правило, этого следует избегать, вы можете сознательно отключить bfcache, установив onunload на что угодно, даже на функцию, которая ничего не делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...