【发布时间】:2010-12-02 07:13:36
【问题描述】:
我编写了以下 Javascript 代码来捕捉 F5 按键并防止用户刷新:
(我知道这不是一个好主意,但不管有人喜欢与否,我都坚持这一点。我问的问题也与为什么下面的脚本不适用于 Safari 4 但适用于其他浏览器有关。)
var fn = function (e)
{
if (!e)
var e = window.event;
var keycode = e.keyCode;
if (e.which)
keycode = e.which;
var src = e.srcElement;
if (e.target)
src = e.target;
// 116 = F5
if (116 == keycode)
{
// Firefox and other non IE browsers
if (e.preventDefault)
{
e.preventDefault();
e.stopPropagation();
}
// Internet Explorer
else if (e.keyCode)
{
e.keyCode = 0;
e.returnValue = false;
e.cancelBubble = true;
}
return false;
}
}
// Assign function to onkeydown event
document.onkeydown = fn;
上面的代码完美适用于 IE 6,7 和 8,从 Firefox 2.0 开始,也适用于 Chrome。
但它不适用于 Windows 版 Safari 4。按 F5 键刷新文档。有趣的是,在 Safari 中,代码进入了上面的 if (e.preventDefault) 部分,但由于某种原因,它并没有阻止默认操作,即刷新页面。
这是 Safari 4 的错误还是我需要编写一些 Safari 特定的代码?
【问题讨论】:
-
为什么?我可以简单地按下重新加载图标并获得您想要阻止的效果。任何正常的浏览器都不会让您对其工作进行如此程度的控制,您不应该尝试这样做!
-
同意。这闻起来很像那些最好被遗忘的右键点击拦截器……修复你的网站,这样刷新就不会破坏它,而不是试图让众多浏览器为你出价。
-
你是不是也屏蔽了ctrl-r?至少在 Firefox 中也会刷新。我可以想象其他浏览器有自己的自定义刷新按钮。这不是一件可行的事情。
-
这是不可能的功能。一方面,我配置了我的浏览器(Opera),因此 JS 无法隐藏工具栏或地址栏,因为我绝对鄙视试图这样做的网站。
-
'功能'意味着有用。除了“我的客户告诉我这样做”(除了最坏的情况之外,这在所有情况下都是有效的,这是)之外,我看不到它的用处
标签: javascript safari dom-events