获取浏览器+平台键盘修饰符

gal*_*007 6 html javascript jquery access-keys

我正在创建一个应该完全通过键盘操作的 Web 应用程序。我必须为用户提供不同按钮的访问键组合,但每个浏览器和平台的访问方式都不同。例如,对于 Ubuntu 中的 Chrome 或 Firefox,如果访问键是“d”,我必须按:

SHIFT+ALT+d
Run Code Online (Sandbox Code Playgroud)

但是如果我从 Firefox 13 或更早版本访问,我必须使用:

CTRL+d
Run Code Online (Sandbox Code Playgroud)

因此,激活访问密钥的方式取决于浏览器及其平台

我想知道是否有一种方法可以自动检测哪些修饰符(SHIFT+ALT 或 CTRL),以便我可以根据用户的平台和浏览器正确更新用户的说明。

蒂亚!

gal*_*007 0

我最终扩展了 jquery 并使用 platform.js:

(function ( $ ) {

    // Requires https://github.com/bestiejs/platform.js/blob/master/platform.js
    // Uses info https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/accesskey 

    class KMPlatform{
      constructor(p){this.platform = p}
        getAccessKeyActivators(){}
    }
    
    class KMLinux extends KMPlatform{
        getAccessKeyActivators(){
        if(platform.name == 'Chrome' || platform.name == 'Firefox')
            return ['alt','shift'];
        if(platform.name.startsWith('Opera'))
            return ['alt'];
        return [];
      }
    }
    
    class KMMac extends KMPlatform{
        getAccessKeyActivators(){
        if(platform.name == 'Chrome' || platform.name == 'Firefox' || platform.name.startsWith('Opera'))
            return ['ctrl','alt'];
        return [];
      }
    }
    
    class KMWindows extends KMPlatform{
        getAccessKeyActivators(){
        if(platform.name == 'Chrome' || platform.name == 'Firefox')
            return ['alt','shift'];
        if(platform.name == 'IE' || platform.name.startsWith('Opera'))
            return ['alt'];
        return [];
      }
    }

    $.extend({
       getAccessKeyActivators: function(){
           if(platform.os.family == 'Linux')
                return (new KMLinux(platform)).getAccessKeyActivators();
            else if (platform.os.family.startsWith('Mac'))
                return (new KMMac(platform)).getAccessKeyActivators();
            else if (platform.os.family.startsWith('Windows'))
                return (new KMWindows(platform)).getAccessKeyActivators();
            else return [];
       }
    });
}( jQuery ));
Run Code Online (Sandbox Code Playgroud)

仓库https://github.com/gbosetti/browser-access-keys-activators npm 包https://www.npmjs.com/package/@gbosetti/access-keys-activators