Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Помогите отменить .onbeforeunload при переходе по внутренним ссылкам (https://javascript.ru/forum/events/55997-pomogite-otmenit-onbeforeunload-pri-perekhode-po-vnutrennim-ssylkam.html)

Clodan 25.05.2015 00:30

Помогите отменить .onbeforeunload при переходе по внутренним ссылкам
 
Здравствуйте!

Помогите решить пожалуй банальную задачу, над которой бьюсь уже не один час из-за нехватки знания.

Есть код:
<script>window.onbeforeunload=function(){$.removeCookie('visit');}</script>


Который чистит куки при закрытии страницы, однако он делает это и при переходе по внутренним ссылкам на сайта. После небольшого поиска, понял что наиболее распространенным решением этой проблемы является
window.onbeforeunload=null;
который можно повесить например на все ссылки <a> на сайте, но это как-раз таки у меня и не получается :(

Подскажите пожалуйста как правильно все это оформить? Заранее спасибо.

ksa 25.05.2015 08:26

Цитата:

Сообщение от Clodan
После небольшого поиска, понял что наиболее распространенным решением этой проблемы является
window.onbeforeunload=null;
который можно повесить например на все ссылки <a> на сайте, но это как-раз таки у меня и не получается

Есть целая статья по работе с событиями...
http://javascript.ru/tutorial/events/crossbrowser

kostyanet 27.05.2015 19:05

Цитата:

Сообщение от Clodan
Который чистит куки при закрытии страницы,

Не при закрытии, а до закрытия, которым сопровождается любое открытие.

Вашу идею в браузере нельзя реализовать. Можно только сделать так, чтобы куки подыхали когда браузер закроют. Иначе при каждом переходе по ссылкам или просто обновлении страницы куки будут исправно стираться и толку с них тогда никакого.

kostyanet 27.05.2015 19:14

Цитата:

Сообщение от Clodan
но это как-раз таки у меня и не получается

Потому что все ссылки придется пропускать через js.

/* где-то было навешано */
window.addEventListener('onbeforeunload',callback);

/* вешаем генерально */
document.body.addEventListener('click',function(e){
    if(e.target.nodeName=='A'){
       window.removeEventListener('onbeforeunload',callback);
       return location.href=e.target.href;
   }
});


Или типа того.

PS Может кто-нибудь из соискателей onbeforeunload объяснить за каким членом-корреспондентом надо стирать куки до закрытия страницы?

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

kostyanet 27.05.2015 19:23

Например

saving_tip=function(e){
	for(var name in inputs)
		if(inputs[name].dirty())
			return (e||window.event).returnValue='\o/';
},

/* below */
if(opts.saving_tip)
	W.addEventListener('beforeunload',saving_tip,false);

/* 
это когда после аякса приходит команда пойти нах 
и чтоб без вопросов пойти, то онбефореунлоад надо отменить сперва
*/
if(typeof data.Location!==U) {
	W.removeEventListener('beforeunload',saving_tip,false);
	return W.location.assign(data.Location);
}


Стандартная схема. А куки при чем тут?


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