使用JavaScript禁用F5和浏览器刷新

时间:2010-03-20 05:26:11

标签: javascript javascript-events

我想使用JavaScript禁用浏览器刷新。

目前,我正在使用window.onbeforeunload,我不希望在用户刷新浏览器时调用它。

最好的方法是什么?

11 个答案:

答案 0 :(得分:81)

更新最近的评论声称这在新版Chrome中无效...如jsFiddle所示,并在我的个人网站上进行了测试,此方法仍适用于Chrome ver {{1 }}

顺便说一句,这在jQuery中非常容易:

jsFiddle

26.0.1410.64 m

旁注:     这只会禁用键盘上的f5按钮。     要真正禁用刷新,您必须使用服务器端脚本来检查页面状态更改。     不能说我真的知道怎么做,因为我还没有这样做。

在我工作的软件站点上,我们将disableF5功能与Codeigniter的会话数据结合使用。例如,有一个锁定按钮,它将锁定屏幕并提示密码对话框。功能“disableF5”快速简便,并使该按钮不做任何事情。但是,为了防止鼠标单击刷新按钮,会发生一些事情。

  1. 单击锁定时,用户会话数据的变量名为“已锁定”,变为TRUE
  2. 单击刷新按钮时,主页上的加载方法是对“已锁定”的会话数据进行检查,如果为TRUE,那么我们简单地不允许重定向并且页面永远不会更改,无论请求的目标< / LI>

    提示 尝试使用服务器设置的Cookie,例如PHP的// 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); ,甚至.Net的$_SESSION来维护“ “您的客户在您的网站上。这是我用CI的Session类做的更多 Vanilla 方法。最大的区别是CI在您的数据库中使用表,而这些 vanilla 方法在客户端中存储可编辑的cookie。但缺点是,用户可以清除其cookie。

答案 1 :(得分:8)

来自网站的恩里克发布:

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

答案 2 :(得分:8)

表示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);
});

答案 3 :(得分:7)

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

答案 4 :(得分:6)

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

答案 5 :(得分:4)

这是我用来禁用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) - 为firefox

返回true

答案 6 :(得分:3)

在纯 JS 中输入这个简单的脚本:

document.addEventListener('keydown', (e) => {
    e = e || window.event;
    if(e.keyCode == 116){
        e.preventDefault();
    }
});

答案 7 :(得分:2)

将此用于现代浏览器:

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

答案 8 :(得分:0)

它适用于所有浏览器:

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

答案 9 :(得分:0)

如果您使用的是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 :(得分:0)

如果要禁用ctrl + f5,ctrl + R,f5,退格,则可以使用此简单代码。此代码适用于Mozila和Chrome。在您的body标签中添加此代码:

np.cast[int](c)