【问题标题】:How to hook IE keyboard event?如何挂钩 IE 键盘事件?
【发布时间】: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


【解决方案1】:
document.body.accessKey = String.fromCharCode(e.keyCode);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多