Может ли кто-нибудь поделиться опытом/кодом, как мы можем обнаружить щелчок на кнопке браузера (для любого типа браузеров)?
Нам нужно обслуживать весь браузер, который не поддерживает HTML5
Может ли кто-нибудь поделиться опытом/кодом, как мы можем обнаружить щелчок на кнопке браузера (для любого типа браузеров)?
Нам нужно обслуживать весь браузер, который не поддерживает HTML5
Событие "popstate" работает только тогда, когда вы что-то нажимаете. Поэтому вам нужно сделать что-то вроде этого:
jQuery(document).ready(function($) {
if (window.history && window.history.pushState) {
window.history.pushState('forward', null, './#forward');
$(window).on('popstate', function() {
alert('Back button was pressed.');
});
}
});
Для обратной совместимости браузера я рекомендую: history.js
существует множество способов, как вы можете определить, нажал ли пользователь кнопку "Назад" . Но все зависит от ваших потребностей. Попробуйте изучить ссылки ниже, они должны вам помочь.
Обнаружение, если пользователь нажал кнопку "Назад" на текущей странице:
Определите, просматривается ли текущая страница после нажатия кнопки "Назад" на предыдущей странице ( "Переслать" ):
Нашел это, чтобы работать хорошо кросс-браузер и мобильный back_button_override.js.
(Добавлен таймер для сафари 5.0)
// managage back button click (and backspace)
var count = 0; // needed for safari
window.onload = function () {
if (typeof history.pushState === "function") {
history.pushState("back", null, null);
window.onpopstate = function () {
history.pushState('back', null, null);
if(count == 1){window.location = 'your url';}
};
}
}
setTimeout(function(){count = 1;},200);
В javascript тип навигации 2 означает, что браузер нажимает кнопку "назад" или "вперед", и браузер фактически берет контент из кэша.
if(performance.navigation.type == 2) {
//Do your code here
}
Вы можете использовать этот удивительный плагин
https://github.com/ianrogren/jquery-backDetect
Все, что вам нужно сделать, это написать этот код
$(window).load(function(){
$('body').backDetect(function(){
// Callback function
alert("Look forward to the future, not the past!");
});
});
Лучший
Он доступен в API истории HTML5. Событие называется 'popstate'
Отключите кнопку URL, выполнив следующую функцию:
window.onload = function () {
if (typeof history.pushState === "function") {
history.pushState("jibberish", null, null);
window.onpopstate = function () {
history.pushState('newjibberish', null, null);
// Handle the back (or forward) buttons here
// Will NOT handle refresh, use onbeforeunload for this.
};
}
else {
var ignoreHashChange = true;
window.onhashchange = function () {
if (!ignoreHashChange) {
ignoreHashChange = true;
window.location.hash = Math.random();
// Detect and redirect change here
// Works in older FF and IE9
// * it does mess with your hash symbol (anchor?) pound sign
// delimiter on the end of the URL
}
else {
ignoreHashChange = false;
}
};
}
};
В моем случае я использую jQuery .load()
для обновления DIV в SPA (одностраничное [веб-приложение]).
Будучи новым для работы с прослушивателем событий $(window).on('hashchange', ..)
, этот оказался сложным и немного взломал. Благодаря чтению большого количества ответов и попытке различных вариантов, наконец выяснилось, как заставить его работать следующим образом. Насколько я могу судить, он пока выглядит стабильным.
В заключение - существует переменная
globalCurrentHash
, которая должна быть установлена каждый раз при загрузке представления.Затем, когда запускается
$(window).on('hashchange', ..)
прослушиватель событий, он проверяет следующее:
- Если
location.hash
имеет одно и то же значение, это означает Going Forward- Если
location.hash
имеет другое значение, это означает Going Back
Я понимаю, что использование глобальных vars - не самое изящное решение, но делать вещи OO в JS кажутся мне сложными до сих пор. Предложения по улучшению/уточнению, безусловно, оценены
Настройка:
var globalCurrentHash = null;
При вызове .load()
для обновления DIV обновите также глобальный var:
function loadMenuSelection(hrefVal) {
$('#layout_main').load(nextView);
globalCurrentHash = hrefVal;
}
На странице ready настройте прослушиватель, чтобы проверить глобальный var, чтобы увидеть, нажата ли кнопка "Назад":
$(document).ready(function(){
$(window).on('hashchange', function(){
console.log( 'location.hash: ' + location.hash );
console.log( 'globalCurrentHash: ' + globalCurrentHash );
if (location.hash == globalCurrentHash) {
console.log( 'Going fwd' );
}
else {
console.log( 'Going Back' );
loadMenuSelection(location.hash);
}
});
});
В случае HTML5 это сделает трюк
window.onpopstate = function() {
alert("clicked back button");
}; history.pushState({}, '');
Предположим, у вас есть кнопка:
<button onclick="backBtn();">Back...</button>
Вот код метода backBtn:
function backBtn(){
parent.history.back();
return false;
}
Просто помните, что все решения с pushState/popstate combo не будут работать на худшем браузере на рынке: Chrome. https://www.bleepingcomputer.com/news/security/google-chrome-to-stop-sites-from-messing-with-the-back-button/