Я хочу отключить обновление браузера с помощью 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)">