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

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№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
Happy Arch Linux User
 
Группа: Extensions
Откуда: Tyumen ✈ Dnipropetrovsk
Зарегистрирован: 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");

Life's emblem here, in youth and vernal bloom,
But reason's finger pointing at the...

Отсутствует

 

№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
Happy Arch Linux User
 
Группа: Extensions
Откуда: Tyumen ✈ Dnipropetrovsk
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 3.0
Веб-сайт

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

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


Life's emblem here, in youth and vernal bloom,
But reason's finger pointing at the...

Отсутствует

 

№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
Happy Arch Linux User
 
Группа: Extensions
Откуда: Tyumen ✈ Dnipropetrovsk
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 3.0
Веб-сайт

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

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

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

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


Life's emblem here, in youth and vernal bloom,
But reason's finger pointing at the...

Отсутствует

 

№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
Happy Arch Linux User
 
Группа: Extensions
Откуда: Tyumen ✈ Dnipropetrovsk
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Firefox 3.0
Веб-сайт

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

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

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


Life's emblem here, in youth and vernal bloom,
But reason's finger pointing at the...

Отсутствует

 

№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–2011 Mozilla Russia
Язык отображения форума: [Русский] [English]