【问题标题】:Catch "Command+R" in Safari with JQuery使用 JQuery 在 Safari 中捕获“Command+R”
【发布时间】:2011-10-12 09:44:53
【问题描述】:

我需要拦截 Safari 中的浏览器重新加载功能(我知道这通常不是应该做的事情,但在我的情况下这是有道理的)。

对于 Windows,我只是这样做:

$(document).keydown(function(event) {
    if ( event.which == 116 ) {
        restart();
        return false;
    }
});

我是否需要使用 JQuery 插件同时捕获两个键,或者 这是否已经在 J​​Query 中以某种形式实现?

另外,Mac下的keycode和windows下的keycode一样吗? (“Command”是键码“17”,“r”是“19”?)还是命令键是“55”,“r”是“15”?

(使用此来源:http://boredzo.org/blog/archives/2007-05-22/virtual-key-codes

【问题讨论】:

  • 如果有人反弹 cmd+r 来做除了硬页面重新加载之外的事情,我会很生气!
  • 我通常会完全同意你的观点,但相信我,在这种情况下这是有道理的

标签: jquery safari keydown keycode


【解决方案1】:

有一个 Jquery 插件来捕获键盘事件,最好的部分是它允许您使用它们的名称来处理键事件。比如如果你想捕获 CTRL + R 那么你不必担心键码,插件会自己处理。

在这里查看:https://keithamus.github.io/jwerty/

【讨论】:

  • 这看起来像是一个有趣的插件来处理它,但我尽量减少 http-requests 并且真的很想避免使用另一个插件。
  • 只想提一下 jwerty 不一定是 jQuery 插件。它与 jQuery 兼容,但也可以独立使用。另外,Christian,如果您担心多个 HTTP 请求,您应该真正将所有 javascript 代码压缩到一个文件中以提供服务。看看Closure CompilerUglify JS
【解决方案2】:

我想我无需使用插件就能解决问题。稍后我会验证它是否也适用于 Mac(我没有),但它适用于 PC 上的 CTRL+R:

var keys = {};

$(document).ready(function(){
    $(document).keydown(function(event) {
        keys[event.which] = true;

        //CTRL+R on a PC    
        if(keys[17] && keys[82])
        {
            restart();
            return false;
        }   

        //COMMAND+R an a Mac    
        if(keys[81] && keys[91])
        {
            restart();
            return false;
        }       
    });

    $(document).keyup(function (event) {
        delete keys[event.which];
    });
});

这个帮助我到达那里:Can jQuery .keypress() detect more than one key at the same time?

【讨论】:

    【解决方案3】:

    您可以使用以下代码在 Mac 上捕获 + R

    $(document).on( 'keydown', function(event){
        if( event.which === 82 && event.metaKey ) {
            alert( 'Your changes will be lost, are you sure to refresh?' );
        }
    });
    

    .metaKey 代表 Mac 上的 和 PC 上的 键。

    【讨论】:

    • 我有同样的问题,但是在点击 cmd+r 时,事件根本不会触发。它使用 cmd+shift+r 触发。任何想法?也许问题是我在“窗口”上绑定了处理程序
    猜你喜欢
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多