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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№106-07-2008 07:16:25

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

Вопросы (и ответы) по разработке расширений

Добрался таки до разработки расширений - вот тренируюсь :)
Многие вопросы решились чтением статей (особенно помогла статья про создание тулбара здесь, что-то удалось найти в существующих расширениях.
Но вот что осталось:
1. Как лучше хранить на долговременной основе структуры типа списков, таблиц и деревьев? Если использовать свойства самого Лиса, то как лучше организовывать хранение? Есть ли в этом принципиальные отличия между 2-м и 3-м Лисами? Пробовал на эту тему смотреть код SessionSaver-а, но как-то там слишком запутано написано;
2. Есть где-нибудь полное описание всего JavaScript-а Лиса в одном месте? А еще лучше, чтобы все это было в какой-нибудь среде разработки (ну или туда можно было бы это подключить)?.. А то пробовал несколько: кучу расширений и Комодо - как-то все не то :(
3. Можно ли использовать локализованные ресурсы из DTD-файлов из JavaScript-а? Или  только открывая их как файлы и парся? Или через getByID()?

Хочу поделиться своей находкой (по крайней мере в статьях про это явно не нашел; пример правильного использования случайно нашел в одном из расширений (только вот запамятовал в каком :() - если открыл Америку - сильно не пинайте):
Столкнулся с проблемой использования ресурсов из DTD-файлов в вызовах функций. То есть использование такого ресурса в качестве значения поля проблемы не вызывает, а вот вызов функции уже не получается :(
Оказалось, что кавычки (их же можно использовать только как текстовые строки) вокруг вставленного идентификатора и вокруг его значения в DTD должны быть одинаковыми (либо обе ', либо обе ")! Если они разные, почему-то выдается сообщение об отсутствии ресурса (видимо это особенность парсера).
Отсюда следует, что в DTD-файлах имеет смысл использовать именно одинарные кавычки для обрамления значений ресурсов, так как практически везде в XML (и соответственно в XUL) по-умолчанию используются двойные кавычки - имхо проще переделать ресурсы.


---  ---

Отсутствует

 

№206-07-2008 10:24:20

homo_nudus
Участник
 
Группа: Extensions
Зарегистрирован: 19-02-2007
Сообщений: 193
UA: Firefox 3.0

Re: Вопросы (и ответы) по разработке расширений

1) Я храню там же, где настройки. Но можно, наверное, хранить при помощи SQLite или JSON.

2) Если я правильно понял вопрос, то здесь.

3) Локализация JavaScript производится при помощи properties-файлов.

Отсутствует

 

№306-07-2008 23:09:43

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

Re: Вопросы (и ответы) по разработке расширений

homo_nudus
Спасибо, посмотрю :)
Только вот по поводу 3-го пункта возник вопрос - где размещать инициализацию текстовых переменных из properties-файлов?
Если делать ее непосредственно в общей части js-файлов - на тот момент данные еще не подгружены.
onLoad можно делать далеко не для всех сущностей - для тех же оверлеев нельзя.
Можно конечно отслеживать это самому и вызывать при первом вызове функций, которые используют эти данные, но неужели не предусмотрено для этого стандартных средств?

Вот еще вопрос возник:
4. Можно ли как-то настроить отображение в консоли утф-8 кириллицы? А то ведь все соотв файлы со строковыми данными должны быть в утф-8. Или только перекодировать перед выводом в консоль?


---  ---

Отсутствует

 

№406-07-2008 23:43:48

homo_nudus
Участник
 
Группа: Extensions
Зарегистрирован: 19-02-2007
Сообщений: 193
UA: Firefox 3.0

Re: Вопросы (и ответы) по разработке расширений

3) В xul-файле создаёте элемент stringbundleset c одноимённым идентификатором, в нём - элемент stringbundle, в свойстве src которого прописываете путь к файлу .properties:

Выделить код

Код:

<stringbundleset id="stringbundleset">
		<stringbundle id="myExtensionStrings" src="chrome://myExtension/locale/myExtension.properties"/>
	</stringbundleset>

В этом же  xul-файле создаёте такие скрипты:

Выделить код

Код:

<script type="application/x-javascript" src="путь к основному скрипту"/>
	<script type="application/x-javascript">
		<![CDATA[
			window.addEventListener("load", имя_функции_с_кодом_всех_нужных_инициализаций, false);
		]]>
	</script>

В основном файле скрипта, в функции инициализации определяете строковые переменные:

Выделить код

Код:

myExtensionStrbundle = document.getElementById("myExtensionStrings");
	myExtensionLoading = myExtensionStrbundle.getString("loading");
	...

Может, есть другие способы, но этот работает.


4) К сожалению, не знаю.

Отсутствует

 

№507-07-2008 10:17:27

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

Re: Вопросы (и ответы) по разработке расширений

homo_nudus

В этом же  xul-файле создаёте такие скрипты:

Все, кроме этого у меня было.
А вот с ним как-то все равно не работает - более того - выдает сообщение об ошибке в консоль:

Ошибка: uncaught exception: [Exception... "Could not convert JavaScript argument"  nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)"  location: "JS frame :: chrome://formfiller2/content/toolbar.xul :: <TOP_LEVEL> :: line 10"  data: no]

Вот как я это все организовал:

Выделить код

Код:

<stringbundleset id="stringbundleset">
    <stringbundle id="stringbundle" src="chrome://formfiller2/locale/formfiller2.properties"/>
  </stringbundleset>
  <script type="application/x-javascript" src="chrome://formfiller2/content/main.js"/>
  <script type="application/x-javascript">
      <![CDATA[window.addEventListener("load", "onLoad( )", false);]]>
  </script>

+

Выделить код

Код:

function onLoad() {
    strBndl=document.getElementById("stringbundle");
    unknownError=strBndl.getString("unknownError");
	dump(strBndl+"\n1\n");
	dump(unknownError+"\n1\n");
    return true;
}

---  ---

Отсутствует

 

№607-07-2008 11:20:20

AllSeeingI
Участник
 
Группа: Members
Зарегистрирован: 12-03-2007
Сообщений: 107
UA: Firefox 2.0

Re: Вопросы (и ответы) по разработке расширений

Строка:

Выделить код

Код:

<![CDATA[window.addEventListener("load", "onLoad( )", false);]]>

должна быть:

Выделить код

Код:

<![CDATA[window.addEventListener("load", onLoad, false);]]>

(второй аргумент addEventListener - ссылка на функцию, а не строка.)

Отсутствует

 

№707-07-2008 11:23:12

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 3.0

Re: Вопросы (и ответы) по разработке расширений

по-моему проще так:

Выделить код

Код:

var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"].getService(Components.interfaces.nsIStringBundleService).createBundle("<путь до properties-файла>"),
bundle.GetStringFromName("foo");

Отсутствует

 

№807-07-2008 13:38:27

homo_nudus
Участник
 
Группа: Extensions
Зарегистрирован: 19-02-2007
Сообщений: 193
UA: Firefox 3.0

Re: Вопросы (и ответы) по разработке расширений

AllSeeingI, точно, только в этом ошибка. Проверил, выдаёт аналогичное сообщение.

Shutnik, спасибо. Так, наверное, элегантнее.

Отсутствует

 

№907-07-2008 15:26:43

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

Re: Вопросы (и ответы) по разработке расширений

AllSeeingI

второй аргумент addEventListener - ссылка на функцию, а не строка

Спасибо, так работает :)

Вот бы еще консоль уникодофицировать?..:whistle:


---  ---

Отсутствует

 

№1008-07-2008 00:56:37

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

Re: Вопросы (и ответы) по разработке расширений

Shutnik

по-моему проще так

Действительно так проще :)

Резюмируя по пункту 3:
Уж как-то больно много надо делать телодвижений (причем шаблонных) для использования параметров :(
Или как-то это все можно сделать проще?
Опять же и шаблоны бы не помешали - например задать строку для вывода динамического диапазона уже проблема - надо создавать для этого несколько параметров, либо парсить самостоятельно.
С обработкой незаданных параметров тоже как-то непонятно - у меня не получилось ее реализовать (я хотел вместо таких параметров выдавать стандартное сообщение, прописанное в коде).

А еще появились новые вопросы:
5. Где-нибудь есть справка по всем подобным вещам с их подробным описанием?

Выделить код

Код:

Components.classes["@mozilla.org/intl/stringbundle;1"]

6. Можно ли модифицировать стандартные диалоговые окна? А то я хочу убрать у prompt кнопку Отмена. Ну или как делать самому диалоги с возвращаемыми значениями?
7. Можно ли сделать многострочный тултип?


---  ---

Отсутствует

 

№1108-07-2008 09:17:34

homo_nudus
Участник
 
Группа: Extensions
Зарегистрирован: 19-02-2007
Сообщений: 193
UA: Firefox 3.0

Re: Вопросы (и ответы) по разработке расширений

6) См. здесь (вообще этот маленький учебник хорошо бы просмотреть полностью).

7) При помощи элемента tooltip можно создавать сложные подсказки, вкладывая в элемент другие элементы.

Отсутствует

 

№1208-07-2008 11:24:58

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 3.0

Re: Вопросы (и ответы) по разработке расширений

Forest
у nsIStringBundleService есть метод formatStringFromName. передаём имя строки, массив с параметрами, количество параметров - получаем строку, где %S заменены на передаваемые параметры. вот вам и шаблоны

Отсутствует

 

№1309-07-2008 00:37:34

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

Re: Вопросы (и ответы) по разработке расширений

homo_nudus
В принципе какая-то версия всего этого у меня есть.
Но наверняка тут есть все.
Спасибо :)

Shutnik

у nsIStringBundleService есть метод formatStringFromName

Спасибо, посмотрю :)

Вот, кстати, очень полезную страницу нашел: Interfaces:)


---  ---

Отсутствует

 

№1409-07-2008 08:11:25

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 1.1

Re: Вопросы (и ответы) по разработке расширений

Forest
У меня ссылки посмотри ещё:
http://fotoleto.ru/mozilla/dev.html

Правда год-другой не обновлял.-)

Отсутствует

 

№1511-07-2008 14:56:28

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

Re: Вопросы (и ответы) по разработке расширений

Что-то не могу найти инфу по тому, как сделать боковую панель :(
Нашел только ссылки на нечто 2002 года, и то недоступное.

vladmir

http://fotoleto.ru/mozilla/dev.html

Спасибо, интересная страница, только вот ссылки на сайдбары оттуда тоже не работают :(


---  ---

Отсутствует

 

№1612-07-2008 16:10:06

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

Re: Вопросы (и ответы) по разработке расширений

Про сайдбары нашел :)

Вот кстати нашел еще одну очень полезную ссылку - XUL_Tutorials:cool:

И вот еще один вопрос:
У меня в массиве хранится табличная структура.
Я хочу отобразить ее текущую выбранную запись.
Есть готовые компоненты для такого? Или надо все руками делать?


---  ---

Отсутствует

 

№1712-07-2008 20:28:08

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

Re: Вопросы (и ответы) по разработке расширений

Попробовал перенести кнопки с тулбара на сайдбар (с toolbarbutton на button) и обнаружил, что вещи типа

Выделить код

Код:

document.commandDispatcher.focusedWindow

и

Выделить код

Код:

document.commandDispatcher.focusedElement

перестали выдавать данные по текущему открытому сайты - стали ссылаться на окно сайдбара.
Прочитал, что это связано с тем, что панели инструментов не включаются в так называемый фокус ринг (то есть фокус на них не фиксируется).
Я правильно понимаю, что кнопку, которая должна получать фокус текущего выбранного элемента на сайте, можно сделать только из toolbarbutton? Или можно и обычную кнопку доработать?
Или может быть вообще можно получить историю изменения фокуса?

Еще возник вопрос, как сделать действительно глобальную переменную (и можно ли вообще ее сделать)?
А то в 2-х .xul файлах подключил один и тот же .js файл, однако после определения переменных в одном файле, в другом они не определились :(
Ну или мб дело в последовательности их обработки? Тогда как задать правильный порядок?


---  ---

Отсутствует

 

№1812-07-2008 21:59:57

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

Re: Вопросы (и ответы) по разработке расширений

как сделать действительно глобальную переменную

Это здесь: http://developer.mozilla.org/en/docs/Working_with_windows_in_chrome_code#Advanced_data_sharing


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

Отсутствует

 

№1913-07-2008 01:28:52

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

Re: Вопросы (и ответы) по разработке расширений

Anton
Спасибо, познавательно :)
Учитывая, что под 2-ку - вариантов прямо скажем мало...


---  ---

Отсутствует

 

№2013-07-2008 11:56:11

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

Re: Вопросы (и ответы) по разработке расширений

Почему в таком случае при вызове CKGFF2_CbImport() недоступен результат вызова onLoad?
Вроде все в одном файле?..

Выделить код

Код:

<overlay id="CKGFF2-Overlay"
   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <script type="application/x-javascript" src="chrome://formfiller2/content/main.js"/>
  <script type="application/x-javascript">
      <![CDATA[window.addEventListener("load", onLoad, false);]]>
  </script>
  
  <broadcasterset id="mainBroadcasterSet"> 
    <broadcaster id="CKGFF2-viewSidebar" 
                 label="&FormFiller2.sidebarTitle;"
                 autoCheck="false"
                 type="checkbox"
                 group="sidebar"
                 sidebartitle="&FormFiller2.sidebarTitle;"
                 oncommand="toggleSidebar('CKGFF2-viewSidebar');" >
        <button id="CKGFF2-Import" tooltiptext="&FormFiller2.tbImportTT;"
    label="&FormFiller2.tbImport;" default="true" 
    oncommand="CKGFF2_CbImport()" />
      </broadcaster>
  </broadcasterset>
  
 </overlay>

---  ---

Отсутствует

 

№2115-07-2008 16:13:09

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

Re: Вопросы (и ответы) по разработке расширений

Вопрос по локализации:
Можно ли сделать дефолтную локаль такую, чтобы параметры, которые есть в ней, брались только оттуда?
А чтобы еще в отдельных локалях их можно было переписывать, но не во всех?


---  ---

Отсутствует

 

№2215-07-2008 16:18:30

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 3.0

Re: Вопросы (и ответы) по разработке расширений

Можно ли сделать дефолтную локаль такую, чтобы параметры, которые есть в ней, брались только оттуда?

можно конечно. сунь её в content и подключай оттуда же, а не из каталога с локалями

на счёт перезаписать не уверен, скорее всего должно ругаться на уже объявленную сущность, но можно попробовать

Отсутствует

 

№2315-07-2008 19:43:13

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

Re: Вопросы (и ответы) по разработке расширений

Shutnik

можно конечно. сунь её в content и подключай оттуда же, а не из каталога с локалями

Имеется в виду, чтобы все такие сущности выносить в отдельный файл, который хранить вне local?
То есть стандартными средствами такое не предусмотрено?


---  ---

Отсутствует

 

№2415-07-2008 22:33:17

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 3.0

Re: Вопросы (и ответы) по разработке расширений

Имеется в виду, чтобы все такие сущности выносить в отдельный файл, который хранить вне local?
То есть стандартными средствами такое не предусмотрено?

ну из всех locale из chrome.manifest всегда подключается только одна. если надо что-то общее для всех - выноси вне locale

Отсутствует

 

№2515-07-2008 23:15:24

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

Re: Вопросы (и ответы) по разработке расширений

Shutnik
Спасибо :)

А можно в своих расширениях использовать стандартные иконки?
И как?


---  ---

Отсутствует

 

Board footer

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