Что-то похоже либо я чего-то не понимаю, либо с многоплатформенностью у Лиса есть проблемы
По крайней мере приведенный мною пример в Линуксе работает иначе - перенаправления в файл не происходит, а вместо этого результат печатается прямо в консоли (файл при этом не создается)
С этим вообще что-то можно сделать?
И баг ли это?
--- ---
Отсутствует
Продолжая тему горячих клавиш и их обработчиков:
Как-то странно тут все сделано: есть обработчики команд command, есть возможность их использования с контролах через одноименный атрибут, однако почему-то с хоткеями они так не работают - нету у key атрибута command!
Мб конечно они как-то вместе и работают, но у меня складывается впечатление, что не работают они вместе
Я понимаю, что все можно делать через onCommand, но тогда как минимум перестает работать фича, что если задизейблить описание command - через все контролы она тоже станет недоступна, но почему-то через хоткей эта функциональность останется доступной (ну или надо и его тоже дизейблить).
Да и некрасиво как-то (и не логично)
Вот пример:
<command id="SF_Fill_CMD" oncommand="SF_Fill();" /> <key id="SF_Fill_Key" keycode="VK_F4" oncommand="SF_Fill();" /> <toolbarbutton id="SF-Fill" tooltiptext="&ScriptFilling.bFillTT;" label="&ScriptFilling.bFill;" command="SF_Fill_CMD" />
Кстати, этот пример под 2-й версией не работает вообще: command ладно, а вот то, что key не работает - уже неприятно...
Причём как-то я не заметил, чтобы какие-то из этих элементов были помечены на оффсайте как относящиеся только к 3-ке
И вообще никто не в курсе, этот бардак на девелоперском оффсайте устранять вообще будут (или в чем его смысл хотя бы)?
А то например и здесь, и и здесь (разница в урлах на docs/) - практически одно и то же?..
--- ---
Отсутствует
нету у key атрибута command!
проверял на XUL Runner'е, вроде есть:
<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <!-- your code here --> <commandset id="cs01"> <command id="c01" oncommand="alert('xyz')"/> </commandset> <keyset id="ks01"> <key id="k01" key="a" command="c01"/> </keyset> <button id="b01" label="do command" command="c01" key="k01"/> <button id="b02" label="disable command" oncommand="document.getElementById('c01').setAttribute('disabled','true');"/> <button id="b03" label="enable command" oncommand="document.getElementById('c01').removeAttribute('disabled');"/> </window>
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Shutnik
http://developer.mozilla.org/En/XUL/Key#Attributes
Там действительно есть
Наверное я как-то неправильно ищу
Anton
Так действительно в 3-ке работает, спасибо
Но все равно смущает тот факт, что недостаточно добавить key, а надо еще и command
То есть получается, что key добавляется только чтобы в элементе стал отображаться соотв хоткей.
Но при этом запросто можно указать разные command разным элементам при одинаковом значении key (а это потенциальный источник ошибок).
Теперь буду разбираться, как же прикрутить хоткей на Фх в 2-ке?..
--- ---
Отсутствует
недостаточно добавить key, а надо еще и command
key вполне достаточно. command там по другой причине.
Соврал ) Атрибут key в <button ... - лишний.
Отредактировано Anton (09-09-2008 13:58:40)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Спасибо за пример, он действительно везде работает
Только вот видимо у меня случай особый - кнопки на тулбаре.
И вот там не получается заставить работать
Сделал даже тестовое расширение, где нет ничего кроме тулбара и кнопок с различными вариантами - так работают только где явно oncommand прописан + хоткеи не работают вообще
Вот выложил.
Что я не так сделал?
Добавлено 26-09-2008 12:31:02
Ещё написал диалог (для изменения настроек расширения) - так не получается отменить нажатие на Ок в обработчике этой кнопки
То есть если я явно после вызова обработчика в xul-е допишу "return false;" - окно не закрывается!
А вот если у меня с обработчике произошло исключение и я в его обработчике сделал "return false;" - обработчик прерывается, но окно все равно закрывается
Пробовал даже переменную булеву заводить и выходить из обработчика всегда в одном месте по "return _переменная_;" - не помогает.
Куда копать?
Отредактировано Forest (26-09-2008 12:26:12)
--- ---
Отсутствует
Что я не так сделал?
Пропустил самое главное : )
"Заверни" keyset и commandset в <window id="main-window"
И ещё, атрибуты key в <toolbarbutton - лишние.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Пропустил самое главное : )
"Заверни" keyset и commandset в <window id="main-window"
И ещё, атрибуты key в <toolbarbutton - лишние.
Вот и я тоже думаю, что что-то важное упускаю
Вечером дома попробую, спасибо
--- ---
Отсутствует
Anton
Пропустил самое главное : )
"Заверни" keyset и commandset в <window id="main-window"И ещё, атрибуты key в <toolbarbutton - лишние.
Все проверил - работает - спасибо
Удивительно, почему в документации об этом ни слова + нет ни в одном примере?..
Shutnik
в xul-файле нужно писать return foo(), в foo возвращать false, когда диалог закрываться не должен
return действительно нужен, но у меня проблема оказалась в другом - промежуточный вызов-обертка, в котором я забыл сделать return
Спасибо за участие
На будущее - интересно, можно ли как-то смотреть возвращаемые такими обработчиками значения?..
--- ---
Отсутствует
Удивительно, почему в документации об этом ни слова + нет ни в одном примере?..
Есть об этом и в документации и в примерах.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Есть об этом и в документации и в примерах
Нисколько не сомневаюсь, что где-то оно есть.
Только вот признак качества документации - насколько быстро можно найти то, о существовании чего даже не догадываешься (ну разве что самую малость)
Рассмотрим оффсайт:
В описании тубларов вообще ничего нет про command и key - исключительно oncommand. Пример.
В описании command и key (а так же в их туториалах: command и key) нет ни слова про
(ссылок тоже нет).
Даже поиск по "main-window" не дает ничего относящегося к вопросу (по крайней мере на первой странице).
Так что у меня в очередной раз складывается впечатление, что кто-то из нас двоих неправильный (я или эта документация).
Есть об этом и в документации и в примерах
Так что за ссылки на эти документы (а особенно на пример поиска, который позволяет их найти) был бы очень признателен.
--- ---
Отсутствует
Each element within the overlay is inserted at a location in the master window, determined by matching id attributes. For instance, if an element in an overlay has an id of file_menu, the corresponding element with the id file_menu in the master window that uses the overlay would be altered. Attributes declared in the overlay are added to that element and child elements are inserted into the window within that element. Elements directly inside the overlay element as children that do not have id attributes are appended to the master window. This allows the addition of scripts to the master window from the overlay.
"Каждый элемент оверлея вставляется в позицию главного окна, определяемую соответствующими атрибутами id. Например, если элемент оверлея имеет атрибут id со значением "file_menu", соответствующий элемент (имеющий атрибут id со значением "file_menu") главного окна, использующего оверлей, будет изменён. Атрибуты и дочерние элементы элемента из оверлея будут добавлены в этот элемент главного окна. Дочерние элементы элемента overlay, не имеющие атрибутов id будут добавлены в главное окно. Это позволяет добавлять скрипты в главное окно из оверлея."
То есть, commandset и keyset особенными не являются: если они должны находиться в элементе window, значит и в оверлее они должны находиться в элементе window. Либо не иметь идентификаторов, но без идентификаторов они не работают - не работают их дочерние command или key.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Спасибо за исчерпывающий ответ
Но все таки примеров у них явно не хватает.
Например
То есть, commandset и keyset особенными не являются: если они должны находиться в элементе window, значит и в оверлее они должны находиться в элементе window. Либо не иметь идентификаторов, но без идентификаторов они не работают - не работают их дочерние command или key.
- это уже не перевод их текста, а собственные знания
Вот ещё с какой проблемой столкнулся: у моей кнопки на тулбаре название сбоку, а не снизу + в Настройке панелей инструментов у неё нет картинки.
Вот кусок из .css:
и из .xul:
<toolbox id="navigator-toolbox"> <toolbar id="SF-Toolbar" class="chromeclass-toolbar" context="toolbar-context-menu" toolbarname="&ACFilling.toolbarName;" hidden="false" persist="hidden"> <toolbaritem flex="0"> <toolbarbutton id="SF-Fill" tooltiptext="&ACFilling.bFillTT;" label="&ACFilling.bFill;" command="sfc_fill" /> </toolbaritem> </toolbar> </toolbox> <toolbarpalette id="BrowserToolbarPalette"> <toolbarbutton id="SF-Fill" tooltiptext="&ACFilling.bFillTT;" label="&ACFilling.bFill;" command="sfc_fill" /> </toolbarpalette>
Смотрел готовые расширения (например для работы с HandyCache) - особой разницы не нашёл (ну или не там искал).
Вот разве что попробовал прописать
- и сразу надпись стала под кнопкой, но вот только картинки в Настройке панелей инструментов теперь явно от стандартного тулбара, причем она там вся - все 5х14 картинок?..
Явно где-то должна прописываться эта информация.
Куда копать?
--- ---
Отсутствует
Forest
Явно где-то должна прописываться эта информация.
Куда копать?
Значит, при настройке тулбара видно только class="toolbarbutton-1".
В chrome.manifest нужно добавить примерно следующее:
Соответственно, в css должен описываться внешний вид кнопки.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
В chrome.manifest нужно добавить примерно следующее:
Да, спасибо, так заработало
Причем на 2-ке даже без
. Но вот на 3-ке без него уже не работает.
Отредактировано Forest (08-10-2008 14:39:15)
--- ---
Отсутствует
А контекстное меню (contentcontextmenu) tabbrowser-ра - это что?
Это которое по правой мышке над пустым местом/кнопкой выпадающего списка табов?
--- ---
Отсутствует
Код из about Лиса не работает в Громоптице.
<text value="&tbae.creator;" class="url" tooltiptext="&tbae.creator.email;" onclick="window.open('mailto:&tbae.creator.email;');"/>
В Лисе при нажатии на такое открывается окно и пытается запуститься почтовый клиент.
А в Громоптице выдается ошибка:
Ошибка: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMJSWindow.open]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: chrome://tbae/content/dialogs/about.xul :: onclick :: line 1" data: no]
--- ---
Отсутствует
Forest
Попробуй
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
или
Отсутствует
Anton
Shutnik
Спасибо, работает
Но второй вариант предпочтительнее, так как первый порождает какое-то вырожденное окно, которое приходится закрывать, чтобы работать дальше.
--- ---
Отсутствует
Не подскажите, с чего начать, чтобы сделать самый простой работающий аддон для FF.
Пытался делать по https://developer.mozilla.org/en/Building_an_Extension, но в итоге то что получилось не работает.
На этом форуме нашел пример http://www.inode.ru/articles/programming/2005-10-04/85, но он еще на FF1 - хочется поновее что-то.
М.б. кто-то сможет что-то подсказать.
Отредактировано Snipe (18-11-2008 13:27:39)
Отсутствует
Snipe
в вики есть немного информации
http://forum.mozilla-russia.org/doku.php?id=development:extension:firefox
http://forum.mozilla-russia.org/doku.php?id=development:extension:mozilla
http://forum.mozilla-russia.org/doku.php?id=development:xul:app:part1
Отсутствует