2015-09-26 76 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'? –