Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№117-01-2009 16:36:31

ilagnev
Участник
 
Группа: Members
Зарегистрирован: 17-01-2009
Сообщений: 3
UA: Safari 3.2

как поменять значения горячих клавиш в расширении?

есть у меня в оверлее такая ветка:

Выделить код

Код:

<keyset id="mainKeyset">
	<key id="ila_hotkeys" modifiers="alt any control" key="K" oncommand="ila_hotkey_fs();" />
	<key id="ila_hotkey" modifiers="alt any control" key="L" oncommand="ila_hotkey_f();" />
</keyset>

я в функции ila_hotkey_fs() делаю следующее:

Выделить код

Код:

document.getElementById('ila_hotkey').setAttribute("key","P");

После этого я ожидаю, что вызов функции ila_hotkey_f() поменяется на ctrl+alt+P, но этого не происходит. Атрибут меняется, это я проверял при помощи алерта в самой функции ila_hotkey_f().

Как мне поменять кнопки, по котороым будет происходить вызов функции?

Отсутствует

 

№217-01-2009 17:50:07

Forest
Участник
 
Группа: Members
Откуда: Обнинск
Зарегистрирован: 05-04-2005
Сообщений: 1778
UA: Firefox 3.0

Re: как поменять значения горячих клавиш в расширении?

Можно посмотреть как это сделано в keyconfig-е.


---  ---

Отсутствует

 

№317-01-2009 18:05:31

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.0

Re: как поменять значения горячих клавиш в расширении?

ilagnev пишет
Выделить код

Код:

document.getElementById('ila_hotkey').setAttribute("key","P");

К сожалению, такие штуки срабатывают только в момент загрузки окна.
Правда, по идее, если очень надо, можно перехватывать нажатия клавиш своим обработчиком, но это будет несколько больше кода. :)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№417-01-2009 18:39:58

ilagnev
Участник
 
Группа: Members
Зарегистрирован: 17-01-2009
Сообщений: 3
UA: Safari 3.2

Re: как поменять значения горячих клавиш в расширении?

Infocatcher пишет

К сожалению, такие штуки срабатывают только в момент загрузки окна.
Правда, по идее, если очень надо, можно перехватывать нажатия клавиш своим обработчиком, но это будет несколько больше кода. :)

а как это скажется на производительности?
я вот размышляю, что если есть уже обработчик, то он где-то прописан, и нужно лишь до него достучатся и поменять один параметр. я в этом не разбираюсь, обьясните если не трудно.
я не понимаю, зачем довешивать обработчик, если он уже есть.

Отсутствует

 

№517-01-2009 19:09:12

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.0

Re: как поменять значения горячих клавиш в расширении?

ilagnev пишет

а как это скажется на производительности?

Ну, производительность снизится, но не думаю, что сильно.

ilagnev пишет

я не понимаю, зачем довешивать обработчик, если он уже есть.

Тот, что уже есть, «регистрирует» сочетания клавиш где-то в районе загрузки окна.
Т.е. вот так будет работать:

Выделить код

Код:

function myLoadHandler(e) {
    window.removeEventListener(e.type, arguments.callee, false);
    document.getElementById("myKey").setAttribute("key", "P");
}
window.addEventListener("load", myLoadHandler, false);

В большинстве случаев этого достаточно – изменения вступают в силу только в новых окнах. Уже упомянутый keyconfig, скорее всего, делает именно это.
А если хочется странного большего – нужно писать дополнительный код.

Разве что, по идее, можно убедить встроенный обработчик «перечитать» сочетания клавиш, но только если в нем это предусмотрено (у меня есть подозрение, что работает это на уровне интерпретации XUL :/, впрочем, я этим как-то не интересовался).

P.S. Еще можно посмотреть, как сделано в Custom Buttons.

Отредактировано Infocatcher (17-01-2009 19:10:50)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№617-01-2009 19:42:12

ilagnev
Участник
 
Группа: Members
Зарегистрирован: 17-01-2009
Сообщений: 3
UA: Safari 3.2

Re: как поменять значения горячих клавиш в расширении?

Infocatcher пишет
Выделить код

Код:

function myLoadHandler(e) {
    window.removeEventListener(e.type, arguments.callee, false);
    document.getElementById("myKey").setAttribute("key", "P");
}
window.addEventListener("load", myLoadHandler, false);

спасибо за помощь.
буду просить пользователей перезапустить браузер, чтобы настройки вступили в силу. :)

ещё по случаю хочю спросить, я для хранения настроек в одном расширении подсмотрел вот такую конструкцию:

Выделить код

Код:

var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
...
pref.setCharPref('hotkey','P');
...
var hotk=pref.getCharPref('hotkey');

храню так настройки.
это правильно, или нужно по другоу делать?

Отсутствует

 

№717-01-2009 19:54:38

Forest
Участник
 
Группа: Members
Откуда: Обнинск
Зарегистрирован: 05-04-2005
Сообщений: 1778
UA: Firefox 3.0

Re: как поменять значения горячих клавиш в расширении?

ilagnev пишет

буду просить пользователей перезапустить браузер, чтобы настройки вступили в силу

В принципе может быть достаточно открыть новое окно, но мб это так только в девелоперском режиме настройки Лиса?..


---  ---

Отсутствует

 

№817-01-2009 20:22:29

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.0
Веб-сайт

Re: как поменять значения горячих клавиш в расширении?

ilagnev

а как это скажется на производительности?

Боюсь, что никто не заметит.

----
Я ради интереса сделал 177 кнопок, всем назначил клавиши a-z, A-Z, Shift+A-Shift+Z, а-я, А-Я, Shift+А-Shift+Я
Каждая печатает в статусбар свою букву, если в статусбаре более 20 символов, отрезает первый символ.
Поклацал по клавиатуре, замедления не ощутил.
Хотя, конечно, профиль почти чистый, и, вероятно обработчик только один, от CB.
Тем не менее, обработчик лезет в компоненту, ищет соответствие, если находит - ищет кнопку, выполняет её код.
Т. е., кода там выполняется не одна строчка.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№917-01-2009 22:54:58

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.0

Re: как поменять значения горячих клавиш в расширении?

ilagnev пишет

храню так настройки.
это правильно, или нужно по другоу делать?

Ну, это самое простое встроенное средство – все, что так сохранено, можно увидеть в about:config или в файле prefs.js в профиле.
Разве что лучше давать имена подлиннее – чтобы избежать возможных конфликтов.
Скажем,
myExtension.somePref
или
extensions.myExtension.somePref

Только если нужны не только ASCII-символы, смотрите, как сделано в chrome://global/content/nsUserSettings.js

P.S. Кстати вот относительно недавно в одном расширении обнаружил такую штуку:

Выделить код

Код:

navigator.preference("perName", prefValue);
var pVal = navigator.preference("perName");

Покрутил и убедился, что в Firefox 1.5+ работает. =)

Отредактировано Infocatcher (17-01-2009 22:56:36)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]