Здравствуйте, Finer, Вы писали:
F>Или как вообще узнать, что страница будет перезагружена?? F>События OnReload, к сожалению, нету.. чем его можно заменить?
onunload
Re[3]: Как узнать, что была нажата кнопка "Refresh" в браузе
OnUnload в IE не отрабатывает, если document.readyState != 'complete' (http://blog.moxiecode.com/2008/04/08/unload-event-never-fires-in-ie/),
поэтому нужно узнать на этапе beforeunload, уходит человек со страницы, перезагружает ее, либо вообще это событие ложное (например, при клике на <a> с href != '' произойдёт beforeunload)
в beforeunload я хотел сделать что-то наподобие document.stop(), чтобы document.readyState стало равным 'complete' и таким образом вызывалось бы onunload, но такого метода не существует..
Re[5]: Как узнать, что была нажата кнопка "Refresh" в браузе
Finer пишет:
> OnUnload в IE не отрабатывает, если document.readyState != 'complete'
ага, точно
> поэтому нужно узнать на этапе beforeunload, уходит человек со страницы, > перезагружает ее, либо вообще это событие ложное (например, при клике на > <a> с href != '' произойдёт beforeunload)
ну дык не принципиально, onunload или onbeforeunload — все равно на
onload потом проверять
РД>ну дык не принципиально, onunload или onbeforeunload — все равно на РД>onload потом проверять
Это да, но есть действия, которые я хочу выполнить при выгрузке страницы. А если я эти действия помещу в OnBeforeOnload, то они выполнятся при ложном вызове(при клике на линку, например).
Поэтому я и хочу в OnBeforeOnload проверять, из-за чего оно произошло:
if (нажали F5 || нажали Ctrl+R || нажали "Reload" || нажали "Close")
{
действия...
}
OnLoad для моей страницы IE тоже не отрабатывает, т.к. не происходит OnReadyStateChange и document.readyState всё время равно interactive (не могу понять, из-за чего). Можно попробовать вызвать document.execCommand('Stop'); чтобы состояние стало complete, но опять же встаёт вопрос: куда этот вызов поместить??
Re[7]: Как узнать, что была нажата кнопка "Refresh" в браузе
Здравствуйте, Finer, Вы писали:
F>OnLoad для моей страницы IE тоже не отрабатывает, т.к. не происходит OnReadyStateChange и document.readyState всё время равно interactive (не могу понять, из-за чего). Можно попробовать вызвать document.execCommand('Stop'); чтобы состояние стало complete, но опять же встаёт вопрос: куда этот вызов поместить??
Попробуй рассказать, зачем тебе это вообще надо.
Нормальные веб-приложения не должны различать рефреш, уход со страницы, и приход обратно на страницу.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Как узнать, что была нажата кнопка "Refresh" в браузе
S>Попробуй рассказать, зачем тебе это вообще надо.
Рассказываю:
I need to do some actions with a user when he reloads(F5, "Reload"
button, Ctrl+R) or closes the page. The Unload event is a good
approach here. However, it is not called in IE when
document.readyState != 'complete' (for example, the readyState for my
site is always 'interactive').
The only event I can go with is OnBeforeUnload. But every click on <a>
with href="javascript:" calls OnBeforeUnload.. So I need to detect
somehow what was the reason of this OnBeforeUnload, and if this reason
is not 'page reload' or 'close' I will just skip this event.
Unfortunately all my workarounds failed:
1) to set the onclick event for each link, where I set the flag and
check this flag in OnBeforeUnload.
It works, but I should set onclick on every application load event in
my ASP.NET api. So what to do with dynamically added controls which
contain anchors inside?
2) I noticed that __doPostBack also happens when we click on <a>. We
may override window.__doPostBack method (the same as to catch
document.forms[0].onsubmit event) where we also can set the flag and
check it up in OnBeforeUnload. But OnBeforeUnload may happen before
__doPostBack. So this method also doesn't pass..
3) To stop loading the document by using document.execCommand('Stop').
This is done to make readyState='complete' and use OnUnload instead of
OnBeforeUnload. But where we should place this stop-method??
Вот.. В общем, нужно узнать причину OnBeforeUnload (для этого я и хочу узнать,
как распознать клик по "Refresh"). Либо найти альтернативу событиям
OnBeforeUnload и OnUnload, чтобы в этой альтернативе выполнить нужные мне
действия над пользователем.
Re[9]: Как узнать, что была нажата кнопка "Refresh" в браузе
Здравствуйте, Finer, Вы писали:
S>>Попробуй рассказать, зачем тебе это вообще надо.
F>Рассказываю: F>I need to do some actions with a user when he reloads(F5, "Reload" F>button, Ctrl+R) or closes the page.
Это всё и так понятно. Непонятно, что за "actions with a user". Что это за действия такие, что для них reload и unload должны вести себя по-разному.
F>Вот.. В общем, нужно узнать причину OnBeforeUnload (для этого я и хочу узнать, F>как распознать клик по "Refresh"). Либо найти альтернативу событиям F>OnBeforeUnload и OnUnload, чтобы в этой альтернативе выполнить нужные мне F>действия над пользователем.
Ну, расставить всем тегам <a> нужный клик-хэндлер, в принципе, можно при помощи behaviors.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Как узнать, что была нажата кнопка "Refresh" в браузере?
От:
Аноним
Дата:
17.11.08 16:09
Оценка:
Здравствуйте, Finer, Вы писали:
F>Всем привет! F>Подскажите, как можно узнать, что в браузере была нажата кнопка "Refresh"??
Может я не в тему или не понял вопрос, а нельзя сравнить урл текущей (после рефреш) страницы и страницы из history.back() или refferer к примеру? Будет время — проверю.