Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как отловить кнопку «Назад» (https://javascript.ru/forum/misc/37226-kak-otlovit-knopku-nazad.html)

Shitbox2 11.04.2013 22:11

Как отловить кнопку «Назад»
 
Видел варианты, когда по таймауту анализировалась адресная строка... А проще можно. Нужна функция, которая при нажатии кнопки «назад» просто выполняет заданный код

devote 12.04.2013 12:52

HTML5-History-API и событие onpopstate

1lider 12.04.2013 14:07

Есть ли варианты решения этой задачи, без HTML5?

megaupload 12.04.2013 14:29

нет,

разве что навешивать на все действия (который могут пустить нас вперед) идентефикаторы числовые и менять якорь на #action344

и хранить текущий якорь в куках и проверять при событии "смена якоря" стал он больше чем в куках или меньше) таким образом отслеживать вперед мы перешли или назад))

megaupload 12.04.2013 14:32

п.с. а зачем ты не хочешь использовать актуальный html5 ?
если ни секрет и зачем хочешь использовать устарелые технологии)?

Shitbox2 12.04.2013 15:33

Цитата:

Сообщение от devote
HTML5-History-API и событие onpopstate

Можно пример кода. Уже пробовал такую комбинацию из примеров в инете, но ничего не пашет.

В примерах что-то типа этого было:
setTimeout( function() {
window.addEventListener("popstate", function(e) {
 MainUrl=e.location || document.location;
 if(oldUrl.pathname==MainUrl.pathname && oldUrl.hash.substring(1,1)!='/'){
    /*alert(oldUrl.pathname+'|'+MainUrl.pathname+'|'+oldUrl.hash);*/
    return;}
 LoadMainUrl(MainUrl.href);
}, false);
}, 900 );

danik.js 12.04.2013 15:35

Цитата:

Сообщение от megaupload
и хранить текущий якорь в куках и проверять при событии "смена якоря" стал он больше чем в куках или меньше) таким образом отслеживать вперед мы перешли или назад))

Зачем куки? Разве при смене hash документ перезагружается?

devote 12.04.2013 15:44

Цитата:

Сообщение от Shitbox2
Можно пример кода. Уже пробовал такую комбинацию из примеров в инете, но ничего не пашет.

вот ссылка с примером: http://javascript.ru/forum/project/2...lacestate.html

По инету много разбросано примеров работы с History API

megaupload 12.04.2013 16:46

Цитата:

Сообщение от danik.js
Зачем куки? Разве при смене hash документ перезагружается?

а вдруг человек нажмет F5 и после этого кнопка назад не сработает)

devote,
музыка завораживает, кто это поет? можно ссылку на торрент альбома?

danik.js 12.04.2013 17:31

Цитата:

Сообщение от megaupload
а вдруг человек нажмет F5 и после этого кнопка назад не сработает)

С чего бы вдруг?

1lider 13.04.2013 14:15

Цитата:

разве что навешивать на все действия (который могут пустить нас вперед) идентефикаторы числовые и менять якорь на #action344

и хранить текущий якорь в куках и проверять при событии "смена якоря" стал он больше чем в куках или меньше) таким образом отслеживать вперед мы перешли или назад))
Но для этого придется прослушивать hash. То есть при любом его изменении, сразу срабатывает определенная функция(и все это, без перезагрузки страницы). С помощью Кук, это делать не совсем мудро по моему, так как переменную в Кукис мы и поставим, но сразу ее считать не получится. Для этого надо будет перезагрузить страницу. А автору, я так понимаю, нужно без перезагрузок.:-)

Тест браузера на поддержку стандартов HTML5: http://html5test.com/

1lider 13.04.2013 14:20

Цитата:

п.с. а зачем ты не хочешь использовать актуальный html5 ?
если ни секрет и зачем хочешь использовать устарелые технологии)?
Для IE в любом случае придется использовать старые технологии. А так, можно было бы конечно и на HTML5.:)

В принципе, чего переживать, IE8 и выше, поддерживает отслеживание изменений hash. А тех пользователей, у кого версия браузера ниже восьмой, можно отправлять на страницу загрузки нового браузера(пусть обновляют браузер).


Событие при изменении hash:
window.onhashchange = function() {
	var hash = window.location.hash.substring(1);
	alert(hash);
}



Проверка на версию браузера IE:
var ua = navigator.userAgent;
if(ua.search(/MSIE/) > 0) {
	if((navigator.appVersion.match(/MSIE\u0020([.\d]+);/)[1]<8)) { // если версия ниже восьмой
		document.location.href='http://www.site.ru/bad_browser.html';
	}
}

devote 13.04.2013 20:08

Цитата:

Сообщение от 1lider
Проверка на версию браузера IE

ох.. зачем вы учите людей опеределять браузер по user-agent'у.. это очень плохая практика.

Цитата:

Сообщение от 1lider
Для IE в любом случае придется использовать старые технологии. А так, можно было бы конечно и на HTML5.

ну дык для таких браузеров придумано много расширений/библиотек. Одна из них написана мною: HTML5-History-API

1lider 13.04.2013 21:36

Цитата:

ох.. зачем вы учите людей опеределять браузер по user-agent'у.. это очень плохая практика.
Ну, можно так например:
var ua = navigator.appName;
	if(ua.indexOf("Microsoft") != -1) {
		alert("Это IE");
	}

:)


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