>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Помогите с созданием расширения http://forum.mozilla-russia.org/viewtopic.php?id=37408 |
Najlus > 20-07-2009 12:23:15 |
Я хочу создать расширение, добавляющее кнопку в Firefox. Код кнопки есть, работает в CustomButtons, а вот как сделать из неё расширение не представляю . Объясните пожалуйста саму структуру расширения и куда там прописывать код или дайте ссылку на данный материал. |
Eskimo > 20-07-2009 14:40:49 |
Najlus |
Infocatcher > 20-07-2009 16:28:31 |
Najlus |
Najlus > 20-07-2009 16:48:44 |
Infocatcher пишет
Ааа, никогда не дружил с английским, придётся методом научного тыка работать 20-07-2009 17:04:22 |
Infocatcher > 20-07-2009 17:06:15 |
Najlus 20-07-2009 17:07:02 |
Najlus > 20-07-2009 17:18:39 |
И таких предупреждений куча, наверное на css ругается, щас попробую удалить |
Infocatcher > 20-07-2009 17:35:50 |
Не, это про стили со страниц. about:config → javascript.options.showInConsole = true |
Najlus > 20-07-2009 17:50:20 |
Расширение это не спасло... буду и дальше пытаться |
Infocatcher > 20-07-2009 17:54:28 |
А что написано в chrome.manifest и install.rdf ? |
Najlus > 20-07-2009 18:08:30 |
Странно О_О я же менял
20-07-2009 18:16:03
|
Infocatcher > 20-07-2009 18:29:56 |
Во-первых, описание в chrome.manifest должно совпадать со структурой папок: Выделить код Код:install.rdf chrome.manifest chrome/ QickBookmarks.jar content/ QickBookmarks/ forumzillaOverlay.xul skin/ classic/ main.css locale/ ru-RU/ QickBookmarks/
Видимо, неправильно подключен скрипт. Выделить код Код:<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/x-javascript" src="chrome://QickBookmarks/content/QickBookmarks.js" /> А в Плюс должна быть кнопка. |
Najlus > 20-07-2009 18:50:04 |
Расширение утановилось, но кнопки тютю 20-07-2009 19:01:39 |
Infocatcher > 20-07-2009 22:03:40 |
Тогда нужно смотреть, что в forumzillaOverlay.xul. Выделить код Код:<?xml version="1.0"?> <overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <toolbarpalette id="BrowserToolbarPalette"> <!-- Встроенное в Firefox хранилище кнопок --> <toolbarbutton label="Some label" oncommand="someJsFunc();" /> <!-- Добавляемая кнопка --> </toolbarpalette> </overlay> |
Crazy-EyE > 21-07-2009 02:04:21 |
Infocatcher пишет
Или использовать CDATA, если скрипт в самом xul-файле. Тогда XML-парсер не будет ругаться на & и < в JS-коде. Примерно так: |
Najlus > 21-07-2009 19:03:45 |
FFUser665 пишет
Ээээ а вы хоть одну такую пару знаете? 21-07-2009 19:10:21 Infocatcher пишет
Чёт немного не понял код. Ясно что он обращается к хранилищу кнопок лиса, а вот что значит строка |
Infocatcher > 21-07-2009 19:20:59 |
Najlus пишет
Строка добавляет новую кнопку, которая будет видна из label – подпись |
Najlus > 21-07-2009 19:28:40 |
А код кнопки где именно прописывать? в скобках someJsFunc(); или вместо этой команды? |
Infocatcher > 21-07-2009 20:32:12 |
Если скрипт большой, он должен быть подключен с помощью тэга <script> и должен реализовывать некоторую внешнюю функцию, которая будет вызываться из oncommand. То есть в <overlay> должен быть добавлен скрипт (возможно, путь к скрипту должен быть через chrome:// – давно не проверял, раньше, вроде, можно было указывать относительный путь): Выделить код Код:<?xml version="1.0"?> <overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/x-javascript" src="cbToExt.js" /> <toolbarpalette id="BrowserToolbarPalette"> <toolbarbutton id="qickBookmarksButton" label="Qick Bookmarks" oncommand="qickBookmarks.command();" /> </toolbarpalette> </overlay> В скрипте должно быть что-то вроде Выделить код Код:var qickBookmarks = { buttonId: "qickBookmarksButton", initialized: false, init: function() { window.removeEventListener("load", this, false); if(this.initialized || !this.button) return; this.cbInit.call(this.button); this.initialized = true; }, command: function() { if(!this.initialized) this.init(); this.cbCode.call(this.button); }, cbCode: function() { /*CODE*/ }, cbInit: function() { /*Initialization Code*/ }, get button() { var button = document.getElementById(this.buttonId); if(!button) return null; delete this.button; return this.button = button; }, handleEvent: function(e) { switch(e.type) { case "load": this.init(e); break; } } }; window.addEventListener("load", qickBookmarks, false); Правда, по-хорошему надо бы посмотреть, как там все запускается в Custom Buttons. P.S. Работоспособность не проверял. 21-07-2009 20:35:09 |
Infocatcher > 21-07-2009 21:52:04 |
Пояснения. – удобно для того, чтобы глобальные переменные не пересекались с другими расширениями. – добавляет обработчик события "load" окна браузера (до полной загрузки нельзя обратиться к элементам интерфейса – их еще нету). – метод объекта qickBookmarks, который будет вызван при наступлении события "load". |
Najlus > 22-07-2009 20:34:56 |
Всёравно не пашет |
Infocatcher > 22-07-2009 20:58:34 |
Najlus пишет
А консоль ошибок на что? В том и дело, что не хватает реализации Остальное должно работать, если заменить соответствующими скриптами из кода исходной кнопки. Так что сначала нужно сделать, чтобы ругалось только на отсутствующее API Custom Buttons (т.е. чтобы работало только при включении Custom Buttons). |
Infocatcher > 28-07-2009 19:33:37 |
Как-то так: |