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



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



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



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

872   10  

10 ответов:

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

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

С сайта Энрике добавлено:

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 для определения типа браузера ($.браузер использует навигатор.UserAgent для определения платформы), вы можете использовать

if('MozBoxSizing' in document.documentElement.style) - возвращает true для firefox

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

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

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

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

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

Comments

    Ничего не найдено.