Отключить обновление F5 и браузера с помощью JavaScript - программирование
Подтвердить что ты не робот

Отключить обновление F5 и браузера с помощью JavaScript

Я хочу отключить обновление браузера с помощью JavaScript.

В настоящее время я использую window.onbeforeunload, и я не хочу, чтобы он вызывался, когда пользователь обновляет браузер.

Каков наилучший способ сделать это?

4b9b3361

Ответ 1

Обновление. Недавний комментарий утверждает, что это не работает в новом Chrome... Как показано в jsFiddle и протестировано на моем личном сайте, этот метод по-прежнему работает с Chrome ver 26.0.1410.64 m

В jQuery это действительно ДЕЙСТВИТЕЛЬНО:

jsFiddle

// 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" выполняется быстро и просто, и эта кнопка ничего не делает. Однако, чтобы предотвратить щелчок мышью на кнопке обновления, происходит пара вещей.

  • При щелчке по блокировке пользовательские данные сеанса имеют переменную с именем "заблокировано", которая становится TRUE
  • При нажатии кнопки обновления на методе загрузки главной страницы выполняется проверка против данных сеанса для "заблокированных", если TRUE, то мы просто не разрешаем перенаправление и страница никогда не изменяется, независимо от запрашиваемого адресата

СОВЕТ: Попробуйте использовать файл cookie на сервере, например PHP $_SESSION или даже .Net Response.Cookies, чтобы поддерживать "where" ваш клиент находится на вашем сайте. Это больше ванильный способ сделать то, что я делаю с классом сеанса CI. Большая разница заключается в том, что CI использует таблицу в вашей БД, тогда как эти методы ванили хранят редактируемый файл cookie в клиенте. Однако недостатком является то, что пользователь может очистить свои файлы cookie.

Ответ 2

С сайта 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;
    }
}

Ответ 3

для 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);
});

Ответ 4

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;
};

Ответ 5

$(window).bind('beforeunload', function(e) { 
    return "Unloading this page may lose data. What do you want to do..."
    e.preventDefault();
});

Ответ 6

Это код, который я использую, чтобы отключить обновление 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

Ответ 7

Он работает для меня во всех браузерах:

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;
            }
    }
}

Ответ 8

Используйте это для современных браузеров:

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);

Ответ 9

Вы можете напрямую использовать горячую клавишу с богатых лиц, если вы используете 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" /> 

Ответ 10

Если вы хотите отключить ctrl + f5, ctrl + R, f5, backspace, вы можете использовать этот простой код. Этот код работает в Mozila, а также в Chrome. Добавьте этот код в свой тег тела:

<body onkeydown="return (event.keyCode == 154)">