Страницы: 1
есть у меня в оверлее такая ветка:
<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() делаю следующее:
После этого я ожидаю, что вызов функции ila_hotkey_f() поменяется на ctrl+alt+P, но этого не происходит. Атрибут меняется, это я проверял при помощи алерта в самой функции ila_hotkey_f().
Как мне поменять кнопки, по котороым будет происходить вызов функции?
Отсутствует
К сожалению, такие штуки срабатывают только в момент загрузки окна.
Правда, по идее, если очень надо, можно перехватывать нажатия клавиш своим обработчиком, но это будет несколько больше кода.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
К сожалению, такие штуки срабатывают только в момент загрузки окна.
Правда, по идее, если очень надо, можно перехватывать нажатия клавиш своим обработчиком, но это будет несколько больше кода.
а как это скажется на производительности?
я вот размышляю, что если есть уже обработчик, то он где-то прописан, и нужно лишь до него достучатся и поменять один параметр. я в этом не разбираюсь, обьясните если не трудно.
я не понимаю, зачем довешивать обработчик, если он уже есть.
Отсутствует
а как это скажется на производительности?
Ну, производительность снизится, но не думаю, что сильно.
я не понимаю, зачем довешивать обработчик, если он уже есть.
Тот, что уже есть, «регистрирует» сочетания клавиш где-то в районе загрузки окна.
Т.е. вот так будет работать:
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)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Выделить кодКод:
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');
храню так настройки.
это правильно, или нужно по другоу делать?
Отсутствует
буду просить пользователей перезапустить браузер, чтобы настройки вступили в силу
В принципе может быть достаточно открыть новое окно, но мб это так только в девелоперском режиме настройки Лиса?..
--- ---
Отсутствует
ilagnev
а как это скажется на производительности?
Боюсь, что никто не заметит.
----
Я ради интереса сделал 177 кнопок, всем назначил клавиши a-z, A-Z, Shift+A-Shift+Z, а-я, А-Я, Shift+А-Shift+Я
Каждая печатает в статусбар свою букву, если в статусбаре более 20 символов, отрезает первый символ.
Поклацал по клавиатуре, замедления не ощутил.
Хотя, конечно, профиль почти чистый, и, вероятно обработчик только один, от CB.
Тем не менее, обработчик лезет в компоненту, ищет соответствие, если находит - ищет кнопку, выполняет её код.
Т. е., кода там выполняется не одна строчка.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
храню так настройки.
это правильно, или нужно по другоу делать?
Ну, это самое простое встроенное средство – все, что так сохранено, можно увидеть в 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)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Страницы: 1