Я хочу отключить обновление браузера с помощью JavaScript.
В настоящее время я использую window.onbeforeunload
, и я не хочу, чтобы он вызывался, когда пользователь обновляет браузер.
Каков наилучший способ сделать это?
Я хочу отключить обновление браузера с помощью JavaScript.
В настоящее время я использую window.onbeforeunload
, и я не хочу, чтобы он вызывался, когда пользователь обновляет браузер.
Каков наилучший способ сделать это?
Обновление. Недавний комментарий утверждает, что это не работает в новом Chrome... Как показано в jsFiddle и протестировано на моем личном сайте, этот метод по-прежнему работает с Chrome ver 26.0.1410.64 m
В jQuery это действительно ДЕЙСТВИТЕЛЬНО:
// slight update to account for browsers not supporting e.which
function disableF5(e) { if ((e.which || e.keyCode) == 116) e.preventDefault(); };
// To disable f5
/* jQuery < 1.7 */
$(document).bind("keydown", disableF5);
/* OR jQuery >= 1.7 */
$(document).on("keydown", disableF5);
// To re-enable f5
/* jQuery < 1.7 */
$(document).unbind("keydown", disableF5);
/* OR jQuery >= 1.7 */
$(document).off("keydown", disableF5);
На стороне примечания: Это отключает только кнопку f5 на клавиатуре. Чтобы действительно отключить обновление, вы должны использовать серверную часть script для проверки изменений состояния страницы. Не могу сказать, что я действительно знаю, как это сделать, поскольку я еще не сделал этого.
На сайте программного обеспечения, на котором я работаю, мы используем мою функцию disableF5 в сочетании с данными сеанса Codeigniter. Например, есть кнопка блокировки, которая блокирует экран и вызывает диалог с паролем. Функция "disableF5" выполняется быстро и просто, и эта кнопка ничего не делает. Однако, чтобы предотвратить щелчок мышью на кнопке обновления, происходит пара вещей.
СОВЕТ: Попробуйте использовать файл cookie на сервере, например PHP $_SESSION
или даже .Net Response.Cookies
, чтобы поддерживать "where" ваш клиент находится на вашем сайте. Это больше ванильный способ сделать то, что я делаю с классом сеанса CI. Большая разница заключается в том, что CI использует таблицу в вашей БД, тогда как эти методы ванили хранят редактируемый файл cookie в клиенте. Однако недостатком является то, что пользователь может очистить свои файлы cookie.
С сайта Enrique отправлено:
window.history.forward(1);
document.attachEvent("onkeydown", my_onkeydown_handler);
function my_onkeydown_handler() {
switch (event.keyCode) {
case 116 : // 'F5'
event.returnValue = false;
event.keyCode = 0;
window.status = "We have disabled F5";
break;
}
}
для mac cmd + r, cmd + shift + r.
function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); };
$(document).ready(function(){
$(document).on("keydown", disableF5);
});
var ctrlKeyDown = false;
$(document).ready(function(){
$(document).on("keydown", keydown);
$(document).on("keyup", keyup);
});
function keydown(e) {
if ((e.which || e.keyCode) == 116 || ((e.which || e.keyCode) == 82 && ctrlKeyDown)) {
// Pressing F5 or Ctrl+R
e.preventDefault();
} else if ((e.which || e.keyCode) == 17) {
// Pressing only Ctrl
ctrlKeyDown = true;
}
};
function keyup(e){
// Key up Ctrl
if ((e.which || e.keyCode) == 17)
ctrlKeyDown = false;
};
$(window).bind('beforeunload', function(e) {
return "Unloading this page may lose data. What do you want to do..."
e.preventDefault();
});
Это код, который я использую, чтобы отключить обновление IE и firefox (это хорошо работает для F5, Ctr + F5 и Ctrl + R)
<script language="javascript" type="text/javascript">
//this code handles the F5/Ctrl+F5/Ctrl+R
document.onkeydown = checkKeycode
function checkKeycode(e) {
var keycode;
if (window.event)
keycode = window.event.keyCode;
else if (e)
keycode = e.which;
// Mozilla firefox
if ($.browser.mozilla) {
if (keycode == 116 ||(e.ctrlKey && keycode == 82)) {
if (e.preventDefault)
{
e.preventDefault();
e.stopPropagation();
}
}
}
// IE
else if ($.browser.msie) {
if (keycode == 116 || (window.event.ctrlKey && keycode == 82)) {
window.event.returnValue = false;
window.event.keyCode = 0;
window.status = "Refresh is disabled";
}
}
}
</script>
Если вы не хотите использовать useragent для определения того, какой тип браузера он ($.browser использует navigator.userAgent для определения платформы), вы можете использовать
if('MozBoxSizing' in document.documentElement.style)
- возвращает true для firefox
Он работает для меня во всех браузерах:
document.onkeydown = function(){
switch (event.keyCode){
case 116 : //F5 button
event.returnValue = false;
event.keyCode = 0;
return false;
case 82 : //R button
if (event.ctrlKey){
event.returnValue = false;
event.keyCode = 0;
return false;
}
}
}
Используйте это для современных браузеров:
function my_onkeydown_handler() {
switch (event.keyCode) {
case 116 : // 'F5'
event.preventDefault();
event.keyCode = 0;
window.status = "F5 disabled";
break;
}
}
document.addEventListener("keydown", my_onkeydown_handler);
Вы можете напрямую использовать горячую клавишу с богатых лиц, если вы используете JSF.
<rich:hotKey key="backspace" onkeydown="if (event.keyCode == 8) return false;" handler="return false;" disableInInput="true" />
<rich:hotKey key="f5" onkeydown="if (event.keyCode == 116) return false;" handler="return false;" disableInInput="true" />
<rich:hotKey key="ctrl+R" onkeydown="if (event.keyCode == 123) return false;" handler="return false;" disableInInput="true" />
<rich:hotKey key="ctrl+f5" onkeydown="if (event.keyCode == 154) return false;" handler="return false;" disableInInput="true" />
Если вы хотите отключить ctrl + f5, ctrl + R, f5, backspace, вы можете использовать этот простой код. Этот код работает в Mozila, а также в Chrome. Добавьте этот код в свой тег тела:
<body onkeydown="return (event.keyCode == 154)">