【发布时间】:2009-09-15 11:24:29
【问题描述】:
当用户尝试按 swf 文件上的某些组合键时,我尝试禁用浏览器快捷方式。虽然我可以在 Firefox 中实现这一点,但下面的代码在 IE 8 中不起作用。如果焦点不在 swf 文件上,下面的代码能够挂钩键盘事件。但是,我需要的是在用户对 swf 文件进行操作时挂钩键盘事件。
function hookKeyboardEvents(e) {
alert("hooked key");
// get key code
var key_code = (window.event) ? event.keyCode : e.which;
// case :if it is IE event
if (window.event)
{
if (!event.shiftKey && !event.ctrlKey && !event.altKey) {
window.event.returnValue = null;
event.keyCode=0;
}
}
// case: if it is firefox event
else
e.preventDefault();
document[flashId].keyDown(key_code);
}
window.document.onkeydown = hookKeyboardEvents;
当焦点在 swf 文件上时,上面的代码永远不会执行。
【问题讨论】:
-
只是对您的代码的更正。 shiftKey、ctrlKey 和 altKey 属性可用于 IE 和 W3C 浏览器。您无需测试 window.event(IE 约定)。
-
所以你的意思是只有 e.preventDefault() 会取消事件
-
我认为 preventDefault 将适用于 Mozilla 浏览器,但不适用于 IE。最好的方法是执行条件语句,而不是根据您看到的浏览器,而是该属性是否存在。试试 if(e.preventDefault) { e.preventDefault(); } 而不是 if(!window.event) { e.preventDefault(); }
-
我上面描述的称为特性/属性嗅探,通常被认为比假设浏览器带有一组预期的功能更安全。不要在任何地方都这样做,但在您知道特定于浏览器的地方。
-
我试图控制 if (e.preventDefault) e.preventDefault();但是这段代码使用 IE 8 生成 javascript 错误
标签: javascript internet-explorer-8 dom-events keyboard-events