【问题标题】:Disable Internet Explorer shortcut keys禁用 Internet Explorer 快捷键
【发布时间】:2009-07-15 09:29:10
【问题描述】:

编辑:等了一会儿,还没有得到任何东西,我决定 做快捷方式禁用的东西只为 现在的IE。有没有可能禁用 访问菜单/打印的 IE 快捷键 通过 vbscript 等?

是否可以禁用浏览器快捷键?

因为它们中的许多都在应用程序中使用。例如, Ctrl+p 正在使用,我不希望浏览器弹出打印窗口。

【问题讨论】:

  • 你设法让它工作了吗?我遇到了同样的问题,还没有找到解决办法。
  • @DianaAmza,我找不到解决方案。 IE 不允许您覆盖默认行为。

标签: javascript internet-explorer vb6 vbscript activex


【解决方案1】:

是的,您可以使用 javascript 监听各种组合键并禁用默认行为。甚至还有一个库可供您使用和测试here。我刚刚在他们的演示文本区域中使用 google chrome 和 firefox 对其进行了测试,它可以按你的意愿工作。

shortcut.add("Ctrl+P",function() {
    return;
});

这适用于我上面列出的浏览器,但 IE 在某些情况下不允许您覆盖默认行为。

您在 IE 中唯一的选择是完全禁用 Ctrl 键,例如:

document.onkeydown = function () { 
  if (event.keyCode == 17) alert('Ctrl Key is disabled'); 
};

这并不理想,可能不是您想要的,但它会起作用。

【讨论】:

  • 在 Ctrl+P 上获取打印窗口 :(
  • 我刚刚厌倦了使用下面的“实时执行”面板。我将键从“Ctrl+Shift+X”更改为“Ctrl+P”并显示打印窗口。这意味着浏览器仍在侦听密钥。我正在使用 Firefox 3。
  • 有些操作是不能禁用的。
  • 我在做什么调用警报窗口,当我这样做时,打印窗口会显示一条警报消息“你好”。这里的脚本:shortcut.add("Ctrl+P",function() { alert("hello"); return; });
  • 感谢基思的帮助。我已经尝试过shortcut.js,起初它看起来非常好,但经过彻底的测试后,我发现了一些问题,例如:Alt+M 启动并且IE 命令菜单也出现了。我必须禁用一些 IE 快捷键。其中一些是:Ctrl+P(工作正常)和 Alt+M(启动但也从命令菜单打开主菜单)。请,如果您禁用了命令菜单,您应该先启用它才能看到这个问题。
【解决方案2】:

您可以尝试为 keydown 事件创建事件处理程序,检查 keyCode 并在需要时阻止其默认操作。但是,这不适用于所有浏览器。

Firefox 示例(取消“打印”快捷键,已验证):

document.addEventListener("keydown", function(oEvent) {
    if (oEvent.keyCode == 80 && oEvent.ctrlKey)
        oEvent.preventDefault();
}, false)

【讨论】:

  • 谢谢谢尔盖。任何类似 IE 的想法。
  • 不,估计没有办法阻止 IE 中的快捷方式。但尝试真的有意义吗?用户仍然可以通过访问菜单来打印或粘贴文本。
  • 我必须禁用一些键并让它们用于其他目的。实际上,这是一个要求,因为系统最初是在桌面上编写的,现在它正在转向网络。在转型的第一阶段,他们希望用户拥有相同的体验。出于某种目的经常使用某些键,而 ctrl+p 是一种用途。
  • 太好了,我猜你的用户以前用 ctrl+p 打印,所以让他们继续这样做吧。
  • 如果应用程序用户必须通过应用程序进行打印,他假设并点击了打印屏幕按钮 :) 这在桌面上是如何工作的,也是必须的。您可以说我们只是将他们从一个平台转移到另一个平台,而没有对用户体验做任何练习,因为他们不希望他们的用户对他们的日常行为有感觉和不同。
【解决方案3】:

与 IE10+ 对抗有一个很好的技巧,可以避免在 alt 组合键上显示浏览器菜单,例如 Alt + FAlt + H ...

我最近在IE11上用过,在你的body上加一个属性accesskey:[yourKey]的anchor

<body>
   <a href="#" accesskey="f"></a>
   <script type="text/javascript">
    window.onkeydown = function(e){
          console.log(e.keyCode + " alt: " + e.altKey);
          e.preventDefault();
    };
    window.onkeyup = function(e){
          console.log(e.keyCode + " alt: " + e.altKey);
          e.preventDefault();
    };
   </script>
</body>

现在,当您按下Alt + f 时,浏览器将不会像往常一样显示“文件弹出窗口”,并且会让事件 keydown 和 keyup 到达您,而不仅仅是 keydown。

【讨论】:

    【解决方案4】:

    我正在处理类似的问题,hooking keyboard event 下面的代码可以很好地禁用,除了 IE 上的 flash 对象没有获得焦点。由于我正在尝试处理 flash 对象上的键盘事件,因此此代码对我不起作用。

    function hookKeyboardEvents(e) {
        // 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) {
                window.event.returnValue = null;
                event.keyCode = 0;
            }
        }
        // case: if it is firefox event
        else
            e.preventDefault();
    }
    
    window.document.onkeydown = hookKeyboardEvents;
    

    【讨论】:

    • 此代码可防止所有击键,仅适用于 firefox
    • 您传递的是“e”,而不是“event”。所以更改所有对“window.event”的引用或使用“e”。它们应该是一样的。
    【解决方案5】:

    在调用 Ctrl+P 上的方法后,您的应用程序只需将键码设为零。我认为这将解决您的问题...

    window.event.keyCode=0;
    

    这会将 keycode 设置为零..所以当资源管理器检查 keyCode 时它将为零...所以默认函数将不会执行...

    试试这个...只是一个建议

    【讨论】:

      【解决方案6】:

      这在 IE 8 中适用于我。重要的是 IE 要求将 ev.returnValue 设置为 false。注意:这仅在您关注文档上的某些元素时才有效……也就是说,如果您只是加载页面并点击“ctrl-p”,您将看到打印对话框。但是,如果您单击页面上的某个位置,然后尝试一下,它应该会抑制打印对话框。

      document.onkeydown = function (e) { 
      
          var ev = e||window.event; 
      
          // Do what I want keys to do ...
      
          // Block browser short cuts
          if(ev.preventDefault) // non-IE browsers
              ev.preventDefault();
          else  // IE Only
              ev.returnValue = false;
      };
      

      【讨论】:

      • 你真的测试过这个吗?因为它似乎在 IE9 中不起作用
      • 是的,我已经在生产中使用了很多年,而且效果很好。但是,可能是我忘了传入上面的“e”参数。刚编辑过。我还添加了一条注释,说明此解决方案仅在您的文档具有焦点时才有效。如果页面上没有焦点,将出现打印对话框。不要认为有任何解决办法。
      猜你喜欢
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多