Sal*_*lil 57 javascript javascript-events
我想使用JavaScript禁用浏览器刷新.
目前,我正在使用window.onbeforeunload,我不希望在用户刷新浏览器时调用它.
最好的方法是什么?
SpY*_*3HH 83
更新最近的一条评论声称这在新的Chrome中不起作用...如jsFiddle所示,并在我的个人网站上进行了测试,此方法仍然适用于Chrome版本26.0.1410.64 m
顺便说一句,这在jQuery中非常简单:
// 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);
Run Code Online (Sandbox Code Playgroud)
旁注:这只会禁用键盘上的f5按钮.要真正禁用刷新,您必须使用服务器端脚本来检查页面状态更改.不能说我真的知道怎么做,因为我还没有做到.
在我工作的软件站点上,我们将disableF5函数与Codeigniter的会话数据结合使用.例如,有一个锁定按钮,它将锁定屏幕并提示密码对话框.功能"disableF5"快速简便,并使该按钮不做任何事情.但是,为了防止鼠标单击刷新按钮,会发生一些事情.
提示:尝试使用服务器设置的cookie(例如PHP$_SESSION或甚至.Net)Response.Cookies来维护客户端在您网站中的"位置".这是我用CI的Session类做的更多 Vanilla方式.最大的区别是CI在您的数据库中使用表,而这些 vanilla方法在客户端中存储可编辑的cookie.不利的一面是,用户可以清除其cookie.
Gia*_*dei 11
在纯 JS 中输入这个简单的脚本:
document.addEventListener('keydown', (e) => {
e = e || window.event;
if(e.keyCode == 116){
e.preventDefault();
}
});
Run Code Online (Sandbox Code Playgroud)
来自网站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;
}
}
Run Code Online (Sandbox Code Playgroud)
对于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);
});
Run Code Online (Sandbox Code Playgroud)
小智 8
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;
};
Run Code Online (Sandbox Code Playgroud)
将此用于现代浏览器:
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);
Run Code Online (Sandbox Code Playgroud)
小智 5
这是我用来禁用 IE 和 Firefox 刷新的代码,适用于以下组合键:
\nF5\xc2\xa0\xc2\xa0|\xc2\xa0\xc2\xa0\n Ctrl+ F5\xc2\xa0\xc2\xa0|\xc2\xa0\xc2\xa0\n Ctrl+R
\n//this code handles the F5/Ctrl+F5/Ctrl+R\ndocument.onkeydown = checkKeycode\nfunction checkKeycode(e) {\n var keycode;\n if (window.event)\n keycode = window.event.keyCode;\n else if (e)\n keycode = e.which;\n \n // Mozilla firefox\n if ($.browser.mozilla) {\n if (keycode == 116 ||(e.ctrlKey && keycode == 82)) {\n if (e.preventDefault)\n {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n } \n // IE\n else if ($.browser.msie) {\n if (keycode == 116 || (window.event.ctrlKey && keycode == 82)) {\n window.event.returnValue = false;\n window.event.keyCode = 0;\n window.status = "Refresh is disabled";\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n如果您不想使用 useragent 来检测它是什么类型的浏览器($.browser用于navigator.userAgent确定平台),您可以使用
if(\'MozBoxSizing\' in document.documentElement.style)对于 Firefox 返回 true
$(window).bind('beforeunload', function(e) {
return "Unloading this page may lose data. What do you want to do..."
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
219352 次 |
| 最近记录: |