2014-10-27 1 views
1

Есть ли способ обнаружить обновление в Javascript? Я смотрю некоторые вещи в Интернете. Очень сложные вещи, такие как cookie сеанса ClientX/ClientY. Нашел ничего, кроме большого сложного беспорядка ... Тогда я что-то подумал, с onload, код всегда выполняется, если страница загружается. Так что он также будет выполнен на перезагрузке Но тогда код, который вы хотите выполнить, только при перезагрузке страницы, а не когда он просто загружается. Когда вы используете onunload, тогда код внутри onunload будет выполняться при закрытии окна, backspace и refresh.Javascript - Обнаружение обновления - onload И onunload - Могли бы вы использовать их оба для обнаружения обновления?

  1. OnLoad
    • загрузки страницы
    • обновить
    • другой ??
  2. OnUnload
    • закрытия браузера
    • обновления
    • забой

Как вы можете видеть, когда я использую OnLoad, она будет загружать страницы и т.д. И с OnUnload он будет делать что-то при закрытии обновления браузера и т. д. Возможно ли, что делать только с обновлением, когда оба события (onload и onunload) запускаются?

PS: Возможно, я ошибаюсь, но у меня была эта идея, она работает/работает?

+1

Я сомневаюсь, что событие OnLoad перезагруженной страницы будет работать «свежо» без доступа к чему-либо, что событие OnUnLoad могло бы быть сохранено без того, что сохранялось между страницами, например, cookie – n8wrl

+1

. Я склонен думать, если вы в зависимости от поведения браузера как onunload и обновить, вы делаете это неправильно (TM). В общем случае это слишком ненадежно.Например, при сбое браузера пользователя onunload никогда не будет вызываться. – mellamokb

+0

@ n8wrl И если вы сначала загружаете onunload, а в onunload запускаете onload? Может ли это работать? –

ответ

3

Не полагайтесь на событие onbeforeunload; использование onload события и localStorage/sessionStorage.

var visited = false; 
window.onload = function() { 
    if (localStorage["visited"] === true) { 
     visited = true; 
    } 
    localStorage["visited"] = true; 
    /* change `local` to `session` if you want 
     this behavior to stay for the present session only */ 
    return; 
} 

Это добавляет флаг на стороне клиента в системе HTML5 в localStorage. Это будет сохранено после перезагрузки страницы/сбоя браузера/закрытия вкладки - снова открыть.

Что в действительности означает код, это проверить, установлен ли этот флаг или нет. Если он установлен, это означает, что пользователь посетил страницу раньше. Затем мы устанавливаем глобальную переменную с именем visited в true. Вы можете проверить эту переменную в своем коде, и если она истинна, остановите выполнение скрипта.

if (visited === true) { 
    return false; //return breaks out of your function 
} 

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

!visited && (function() { 
    //your code here 
})(); 

Этот метод (или любой способ, как, впрочем) не глупое доказательство. ИСПОЛЬЗУЙТЕ ЭТО ТОЛЬКО ДЛЯ ЛУЧШЕГО ОПЫТА ПОЛЬЗОВАТЕЛЯ, а НЕ ДЛЯ ПРЕДОТВРАЩЕНИЯ ИСКУССТВЕННОЙ ДЕЯТЕЛЬНОСТИ. ЛЮБОЙ ПОЛЬЗОВАТЕЛЬ МОЖЕТ ЛЕГКО ОЧИСТИТЬ ИЛИ ИЗМЕНИТЬ localStorage ДАННЫЕ.

+0

Как вы собираетесь рассказывать «побывали» с обновления с «посещенных», а также, посетив сайт снова через несколько дней? – n8wrl

Смежные вопросы