Firefox SDK: как да заснемете бързия клавиш на потребителите в предпочитанията?

В package.json имам:

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

И изглежда като input type=text. Как мога да заснема потребителската комбинация от клавишни комбинации? Не е страхотно потребителят да въвежда на ръка думи като alt или още по-лошо accel.

Официалната документация относно клавишните комбинации не казва нищо за улавяне в предпочитания.


person Vitaly Zdanevich    schedule 26.09.2015    source източник
comment
Активирам заснемането за моите потребители. Просто имам потребител, който щраква върху зададена клавишна комбинация, след което ги уведомявам, че слушат, моля, въведете комбинация и докато пишат, аз си спомням клавишите. Изобщо не е трудно, просто прост addEventListener с предотвратяване на подразбиране и спиране на разпространението.   -  person Noitidart    schedule 26.09.2015
comment
@Noitidart направи ли това в прости предпочитания или на персонализиран екран с предпочитания?   -  person Vitaly Zdanevich    schedule 26.09.2015
comment
Простите предпочитания ли са вградената страница с опции? Ето къде го направих: addons.mozilla .org/en-US/firefox/addon/workspacehopper/   -  person Noitidart    schedule 27.09.2015
comment
@Noitidart Инсталирах вашия аддон и отворих предпочитанията - за Hop Window мога да задам само един ключ - например Alt - а не за exampleAlt + Y?   -  person Vitaly Zdanevich    schedule 27.09.2015
comment
А, да, но можете лесно да слушате alt и т.н., просто направете e.altKey metaKey или ctrlKey   -  person Noitidart    schedule 27.09.2015
comment
@Noitidart Можете ли да напишете в отговор кода, който може да улови няколко клавишни комбинации? Ще добавя този код към уикито на Mozilla Developer Network относно клавишните комбинации и предпочитанията.   -  person Vitaly Zdanevich    schedule 27.09.2015
comment
Добре, ще напиша нещо, базирано на моя аддон по-горе. Очакваме вашите приноси в MDN!   -  person Noitidart    schedule 27.09.2015


Отговори (1)


В този прозорец на фрагмента може да бъде прозорец на съдържание (tab/iframe/etc) или 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();
person Noitidart    schedule 27.09.2015
comment
Имам файл package.json с предпочитания за клавишни комбинации - как мога да извикам enterHotkeyRecord(), когато потребителят щракне върху бутона в предпочитанията на добавката? - person Vitaly Zdanevich; 27.09.2015
comment
Ако това е страница с вградени опции, можете да слушате как вашият панел с опции се показва с наблюдателя, който се вижда тук: developer.mozilla.org/en-US/Add-ons/ и след това aSubject от този наблюдател е window обхватът на вашата страница с добавки, направете getElementById и го прикачете. - person Noitidart; 27.09.2015
comment
Вградена страница с опции - това е, когато моят json с предпочитания не е като отделен файл, а точно в index.js? - person Vitaly Zdanevich; 27.09.2015
comment
Пример за страница с вградени опции: github.com/Noitidart/l10n/tree/inline-options този xpi в този клон е лош, но изтеглете като zip и инсталирайте, след това отидете на диспечера на добавки, след което щракнете върху опцията за реда на добавките l10n, това са вградени страници, мисля, че sdk simple-prefs е същото. - person Noitidart; 28.09.2015
comment
Хм, още веднъж за вашия аддон WorkspaceHopper - натискам към Set Hotkey, но нищо не се случва (дори и да се опитвам да задам някакъв бърз клавиш)... Но както си спомням преди няколко часа видях, че текстът на бутона се промени... - person Vitaly Zdanevich; 28.09.2015
comment
Вероятно е грешка, която направих преди няколко години и беше нова с addon sdk, така че беше експериментална добавка, полудях хаха - person Noitidart; 28.09.2015
comment
Възможно ли е да промените label от control-бутона в предпочитанията? - person Vitaly Zdanevich; 28.09.2015
comment
Динамично? Да лесно, просто му дайте идентификатор, след което направете getElementById с aSubject на наблюдателя. Или getElementsByTagName и т.н - person Noitidart; 28.09.2015
comment
Възможно ли е само когато предпочитанията са вградени, а не на отделен package.json? - person Vitaly Zdanevich; 28.09.2015
comment
Отидете в IRC, нека teamviewer ще ви покажа как да го направите. Не съм запознат с package.json, но съм сигурен, че с DOM инспектора ще го видим по същия начин. client00.chat.mibbit.com / - person Noitidart; 28.09.2015
comment
Благодаря ви за отговора, малко редактирам кода ви и го приемам - с това наистина мога да уловя клавишна комбинация, но без да променя текста на бутона в предпочитанията, не мога да използвам това. Ще помисля за html-страница за предпочитания... - person Vitaly Zdanevich; 29.09.2015
comment
Използвайте наблюдателя, за да слушате страницата си с предпочитания, aSubject е window, след това getElementsByTagName или каквато и да е DOM манипулация, за да стигнете до вашия бутон и да промените етикета. Ако искате да видите примерна html страница, вижте тук: github.com/Noitidart/l10n/tree /html-опции - person Noitidart; 29.09.2015