2012-04-19 84 views
2

我想在我的web应用程序中禁用F5键。我正在使用以下代码:无法禁用IE8中的F5键

<html> 
<head> 
<script type="text/javascript"> 
window.onkeydown=function(e) { 
       if (e.keyCode === 116) { 
         alert("This action is not allowed"); 
         e.keyCode = 0; 
         e.returnValue = false;     
         return false; 
        } 

       } 
</script> 
</head> 
<body> 
<p> F5 Test IE8</p> 
</body> 
</html> 

上述代码在Chrome中正常工作,但在IE8中无法正常工作。按F5页面会在IE8上刷新。我曾尝试使用e.preventDefault(),但没有任何工作。任何帮助?

+9

为了什么目的?他们也可以使用Ctrl/Cmd + R或按下刷新按钮。 – 2012-04-19 05:24:25

+0

我认为另一个(可能更好)选项是检查用户是否正在从页面导航(例如:刷新)并要求确认。 – Shoban 2012-04-19 05:29:35

+4

请勿篡改默认的浏览器功能。 – 2012-04-19 05:30:44

回答

4

尝试下一编码:

<html> 
<head> 
<script type="text/javascript"> 
    document.onkeydown=function(e) { 
    e=e||window.event; 
    if (e.keyCode === 116) { 
     e.keyCode = 0; 
     alert("This action is not allowed"); 
     if(e.preventDefault)e.preventDefault(); 
     else e.returnValue = false; 
     return false; 
    } 
    } 
</script> 
</head> 
<body> 
<p> F5 Test IE8</p> 
</body> 
</html> 
  • 必须使用的,而不是window对象document对象。在IE8中window对象不支持onkeydown
  • 必须使用e=e||window.event;代码行,因为在IE8-当事件注册为element.on...任何参数接收到事件处理函数(从你的例子eundefined);
+0

谢谢安德鲁的帮助。通过您发布的代码段,我收到警报消息,但页面仍在IE8上刷新。按F5键时,有什么办法可以阻止页面刷新? – 2012-04-19 06:54:31

+0

@Himanshu Saraswat,对不起,我输了一行代码'e.keyCode = 0;'查看更新后的答案。我在IE8和Chrome中检查过它。 – 2012-04-19 10:44:56

1

测试在IE8,Firefox和Chrome:

document.onkeydown=function(e) { 
    var event = window.event || e; 
    if (event.keyCode == 116) { 
     event.keyCode = 0; 
     alert("This action is not allowed"); 
     return false; 
    } 
} 

另见this example

+0

在我的示例中,您必须首先关注结果帧以测试脚本。我更新了链接以防止这种情况发生。要再次查看源代码,请移除链接网址中的/ show /'。 – scessor 2012-04-19 06:55:17

+0

感谢一百万名受访者。你的代码工作。但是我也注意到,如果我正在测试多个击键(F5,Backspace或ctrl + R),那么在代码处理到达onbeforeunload事件时,F5必须是第一个要测试的键。感谢您的帮助 – 2012-04-19 14:58:53

+0

不客气。 – scessor 2012-04-19 15:55:03