Отключите F5 и обновите браузер, используя JavaScript - PullRequest
55 голосов
/ 20 марта 2010

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

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

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

Ответы [ 10 ]

81 голосов
/ 03 ноября 2011

Обновление В последнем комментарии утверждается, что это не работает в новом 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 на клавиатуре. Чтобы действительно отключить обновление, вы должны использовать серверный скрипт для проверки изменений состояния страницы. Не могу сказать, что действительно знаю, как это сделать, потому что я этого еще не сделал.

На сайте программного обеспечения, на котором я работаю, мы используем мою функцию disableF5 в сочетании с данными сеанса Codeigniter. Например, есть кнопка блокировки, которая блокирует экран и запрашивает диалоговое окно ввода пароля. Функция «disableF5» - быстрая и простая, и она не позволяет этой кнопке ничего делать. Однако, чтобы предотвратить щелчок мышью на кнопке обновления, необходимо выполнить несколько действий.

  1. Когда нажата блокировка, данные сеанса пользователя имеют переменную с именем «locked», которая становится TRUE
  2. Когда нажата кнопка обновления, в методе загрузки главной страницы выполняется проверка данных сеанса на «заблокированные», если TRUE, то мы просто не разрешаем перенаправление, и страница никогда не изменяется, независимо от запрошенного места назначения

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

8 голосов
/ 08 июля 2013

для 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);
});
8 голосов
/ 20 марта 2010

С сайта Энрике размещено:

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;
    }
}
7 голосов
/ 27 августа 2014
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;
};
6 голосов
/ 16 августа 2013
$(window).bind('beforeunload', function(e) { 
    return "Unloading this page may lose data. What do you want to do..."
    e.preventDefault();
});
4 голосов
/ 14 ноября 2012

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

2 голосов
/ 22 декабря 2013

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

function my_onkeydown_handler( event ) {
    switch (event.keyCode) {
        case 116 : // 'F5'
            event.preventDefault();
            event.keyCode = 0;
            window.status = "F5 disabled";
            break;
    }
}
document.addEventListener("keydown", my_onkeydown_handler);
0 голосов
/ 24 апреля 2015

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

<body onkeydown="return (event.keyCode == 154)">
0 голосов
/ 12 марта 2015

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

У меня работает во всех браузерах:

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;
            }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...