Страницы: 1
Я хочу создать расширение, добавляющее кнопку в Firefox. Код кнопки есть, работает в CustomButtons, а вот как сделать из неё расширение не представляю . Объясните пожалуйста саму структуру расширения и куда там прописывать код или дайте ссылку на данный материал.
(сори если повторяюсь, но в поиске ничего внятного не нашёл)
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Najlus
В общем случае задача нетривиальна.
Про структуру: https://developer.mozilla.org/Ru/Building_an_Extension, https://developer.mozilla.org/En/Building_an_Extension.
А начать лучше с работающего расширения, добавляющего кнопки.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
NajlusВ общем случае задача нетривиальна.Про структуру: https://developer.mozilla.org/Ru/Building_an_Extension, https://developer.mozilla.org/En/Building_an_Extension.А начать лучше с работающего расширения, добавляющего кнопки.
Ааа, никогда не дружил с английским, придётся методом научного тыка работать
Добавлено 20-07-2009 17:04:22
Дополнение обозвал Sample, кнопка не появилась
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Najlus
По первой ссылке почти все на русском.
Добавлено 20-07-2009 17:07:02
Что в консоли ошибок?
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Предупреждение: Неизвестное свойство «behavior». Потерянное объявление.
Источник: http://vkontakte.ru/css/rustyle.css?31
Строка: 25
Предупреждение: Ошибка при анализе значения «cursor». Потерянное объявление.
Источник: http://vkontakte.ru/css/rustyle.css?31
Строка: 120
Предупреждение: Ожидалось объявление, но найдено «/». Пропущено до следующего объявления.
Источник: http://vkontakte.ru/css/rustyle.css?31
Строка: 277
И таких предупреждений куча, наверное на css ругается, щас попробую удалить
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Не, это про стили со страниц.
about:config → javascript.options.showInConsole = true
И расширение Console² может пригодиться.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Расширение это не спасло... буду и дальше пытаться
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
А что написано в chrome.manifest и install.rdf ?
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#"><Description about="urn:mozilla:install-manifest">
<em:id>sinklerfirst@gmail.com</em:id>
<em:version>1.0</em:version>
<em:type>2</em:type>
<!-- Указывается приложение для которого может
быть установлено Расширение, его максимальная
и минимальная поддерживаемая версия. -->
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>1.0</em:minVersion>
<em:maxVersion>4.0</em:maxVersion>
</Description>
</em:targetApplication>
<!-- Front End MetaData -->
<em:name>sample</em:name>
<em:description>A test extension</em:description>
<em:creator>Your Name Here</em:creator>
<em:homepageURL>http://www.example.com/</em:homepageURL>
</Description>
</RDF>
Странно О_О я же менял
а вот в маифесте (было создано на основе расширения mozilla-forums):
overlay chrome://browser/content/browser.xul chrome://QickBookmarks/content/forumzillaOverlay.xul
content QickBookmarks jar:chrome/QickBookmarks.jar!/content/QickBookmarks/skin QickBookmarks classic/1.0 jar:chrome/QickBookmarks.jar!/skin/classic/
style chrome://global/content/customizeToolbar.xul chrome://QickBookmarks/skin/main.css
style chrome://browser/content/browser.xul chrome://QickBookmarks/skin/main.csslocale QickBookmarks ru-RU jar:chrome/QickBookmarks.jar!/locale/ru-RU/QickBookmarks/
Добавлено 20-07-2009 18:16:03
Console² пожаловался вот на это:
Ошибка: неправильный
Источник: chrome://qickbookmarks/content/forumzillaOverlay.xul
Строка: 44, символ: 12
Исходный код:
image && mi. setAttribute ("image", "moz-anno:favicon:" + image);
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Во-первых, описание в chrome.manifest должно совпадать со структурой папок:
install.rdf chrome.manifest chrome/ QickBookmarks.jar content/ QickBookmarks/ forumzillaOverlay.xul skin/ classic/ main.css locale/ ru-RU/ QickBookmarks/
Console² пожаловался вот на это:
Видимо, неправильно подключен скрипт.
Должно быть примерно вот так:
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/x-javascript" src="chrome://QickBookmarks/content/QickBookmarks.js" />
А в
chrome/QickBookmarks.jar/content/QickBookmarks/QickBookmarks.js
уже сам скрипт.
Плюс должна быть кнопка.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Расширение утановилось, но кнопки тютю
Добавлено 20-07-2009 19:01:39
Опять на туже ошибку жалуется
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Тогда нужно смотреть, что в 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>
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Видимо, неправильно подключен скрипт.
Должно быть примерно вот так:
Или использовать CDATA, если скрипт в самом xul-файле. Тогда XML-парсер не будет ругаться на & и < в JS-коде. Примерно так:
Отсутствует
дык сделай так:ищешь одинаковые(делающие одно и то же) 1кнопку под СВ2 расширение добавляющее эту кнопкусмотришь код кнопкираспаковываешь расширение и смотришь как и где это код прописан в нёмдалее действуешь со своим кодом аналогично
Ээээ а вы хоть одну такую пару знаете?
Добавлено 21-07-2009 19:10:21
Тогда нужно смотреть, что в 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>
Чёт немного не понял код. Ясно что он обращается к хранилищу кнопок лиса, а вот что значит строка
<toolbarbutton label="Some label" oncommand="someJsFunc();" />
както не особо.
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
а вот что значит строка
Строка добавляет новую кнопку, которая будет видна из
Вид – Панели инструментов – Настроить
label – подпись
oncommand – выполняемая команда
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
А код кнопки где именно прописывать? в скобках someJsFunc(); или вместо этой команды?
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Если скрипт большой, он должен быть подключен с помощью тэга <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
P.P.S. Там потом еще будет ругаться на
Отредактировано Infocatcher (21-07-2009 20:37:38)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Пояснения.
– удобно для того, чтобы глобальные переменные не пересекались с другими расширениями.
– добавляет обработчик события "load" окна браузера (до полной загрузки нельзя обратиться к элементам интерфейса – их еще нету).
– метод объекта qickBookmarks, который будет вызван при наступлении события "load".
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Всёравно не пашет
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Всёравно не пашет
А консоль ошибок на что?
В том и дело, что не хватает реализации
Остальное должно работать, если заменить
соответствующими скриптами из кода исходной кнопки.
Так что сначала нужно сделать, чтобы ругалось только на отсутствующее API Custom Buttons (т.е. чтобы работало только при включении Custom Buttons).
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Как-то так:
qick_bookmarks-0.1.1dev-fx.xpi [8,0 Кбайт] (без jar-архива)
qick_bookmarks-0.1.1-fx.xpi [6,1 Кбайт]
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Страницы: 1