2015-09-26 48 views
2

package.json我:Firefox SDK:如何在用户偏好中“捕捉”用户热键?

"preferences": [{ 
    "name": "hotkeyPopup", 
    "title": "Hotkey for translating selected text", 
    "type": "string", 
    "value": "alt-Y" 
    }] 

它看起来像input type=text。我如何捕获用户的热键组合?这不是很酷,用户必须通过像alt或甚至更糟糕的手accel

Official documentation about hotkeys撇开偏好不说。

+0

我启用了为我的用户进行捕获。我只是有一个用户点击“设置热键”,然后我通知他们“听,请输入combintation”,当他们键入我记得的钥匙。一点也不难,只是一个简单的addEventListener,可以防止默认和停止传播。 – Noitidart

+0

@Noitidart你在简单的首选项或自定义屏幕上的喜好? –

+0

简单的首选项内联选项页面?那就是我所做的:https://addons.mozilla.org/en-US/firefox/addon/workspacehopper/?src=dp-dl-othersby – Noitidart

回答

1

在该片断窗口可以是一个内容窗口(制表/ iframe中/等)或XUL窗口(nsIDOMWindow)

非常基本的非常详细的,没有技巧。未经测试。

function enterHotkeyRecord() { 
    window.addEventListener('keydown', downed, false); 
    window.addEventListener('keyup', upped, false); 
    window.addEventListener('keypress', pressed, false); 
} 

function exitHotkeyRecord() { 
    window.removeEventListener('keydown', downed, false); 
    window.removeEventListener('keyup', upped, false); 
    window.removeEventListener('keypress', pressed, false); 
} 

function pressed(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
} 

function upped(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
} 

function downed(e) { 
    e.preventDefault(); 

    if (e.repeat) { 
     // if hold down a key it fires multiple times so ignore it 
     return; 
    } 


    var key = String.fromCharCode(e.code); 

    var str = []; 

    if (e.keyCode == 27) { 
     // user hit escape so lets exit 
     enterHotkeyRecord(); 
     return; 
    } 

    if (e.altKey) { 
     str.push('Alt'); 
    } 

    if (e.shiftKey) { 
     str.push('Shift'); 
    } 

    if (e.metaKey) { 
     str.push('Meta'); 
    } 

    if (e.ctrlKey) { 
     str.push('Ctrl'); 
    } 


    str.push(key); 

    console.log('you pressed:', str.join(' + ')); 
} 

enterHotkeyRecord(); 
+0

我有一个文件[package.json](https://github.com/vitaly-zdanevich/extension-firefox-yandex-translate/blob/master/src/package.json)与热键的喜好 - 我怎么打电话'当用户在插件的喜好中点击按钮时,输入hkeykey()'? –

+0

如果它是内联选项页面,您可以听到您的optioan面板显示在这里看到的观察者:https://developer.mozilla.org/en-US/Add-ons/Inline_Options#Display_notifications,然后是“aSubject”那个观察者就是你的插件页面的窗口范围,做一个'getElementById'并附加它。 – Noitidart

+0

内联选项页面 - 这是当我的JSON偏好不是单独的文件,而是在'index.js'? –