Экстеншн для thunderbird. В messengercompose хочу, чтобы вместо label для поля subject была моя кнопка. Как сделать такой оверлей? И каков вообще алгоритм решения таких проблем? Как узнавать название того обьекта, в который я хочу втроить что-то свое? Лезть в исходники, или есть какой-то «культурный» способ?

bunker6 пишет

Экстеншн для thunderbird. В messengercompose хочу, чтобы вместо label для поля subject была моя кнопка. Как сделать такой оверлей?...

вроде бы так:

Выделить код

Код:

<overlay id="...">
...
    <button id="..." removeelement="id_заменяемого элемента" .../>
...
</overlay>

...Как узнавать название того обьекта, в который я хочу втроить что-то свое? Лезть в исходники, или есть какой-то «культурный» способ?

Для Thunderbird тоже есть DOM Inspector: https://addons.mozilla.org/extensions/m … 10&id=1806

Спасибо, особенно за DOM. =)
А что делать в том случае, если у конкретного элемента не прописан id? К нему же можно как-то обратиться (скриптом)? В моем случае это:

Выделить код

Код:

<hbox align="center">
            <label value="&subject.label;" accesskey="&subject.accesskey;" control="msgSubject"/>
            <textbox id="msgSubject" flex="1" class="toolbar" disableonsend="true"
                     oninput="gContentChanged=true;SetComposeWindowTitle();"
                     onkeypress="subjectKeyPress(event);" />
          </hbox>
bunker6 пишет

...если у конкретного элемента не прописан id?...

Тогда (по-моему) проще встроить в оверлей родительского окна элемента обработчик onload, при обработке события найти нужный элемент, удалить и заменить своим. Что-то вроде

Выделить код

Код:

var b = document. createElement ("button");
b. setAttribute ("label", "...");
...
var l = document. getElementsByAttribute ("control", "msgSubject") [0];
var p = l. parentNode;
p. insertBefore (b, l);
p. removeChild (l);

немного похожая задача.
в thunderbird в addressbook хочется добавить кнопку напротив каждого телефона.
не очень понятно, как управлять их видимостью, т.к. неясно как приделать event handler к смене текущей карточке.

overlay xul:

Выделить код

Код:

<overlay>
  <vbox id="cvbPhone">
    <description class="CardViewText" id="cvPhWork" removeelement="true" />
    <description class="CardViewText" id="cvPhHome" removeelement="true" />
    <description class="CardViewText" id="cvPhFax" removeelement="true" />
    <description class="CardViewText" id="cvPhCellular" removeelement="true" />
    <description class="CardViewText" id="cvPhPager" removeelement="true" />

    <vbox id="my_id">
      <hbox align="center">
        <vbox flex="1">
          <description class="CardViewText" id="cvPhWork" />
        </vbox>
        <vbox pack="end">
          <button id="cvPhWork-button"
                  label="call"
                  oncommand="callCall( 'cvPhWork' );"
          />
        </vbox>
      </hbox>
      <hbox align="center">
        <vbox flex="1">
          <description class="CardViewText" id="cvPhHome" />
        </vbox>
        <vbox pack="end">
          <button id="cvPhHome-button"
                  label="call"
                  oncommand="callCall( 'cvPhHome' );"
          />
        </vbox>
      </hbox>
      <hbox align="center">
        <vbox flex="1">
          <description class="CardViewText" id="cvPhFax" />
        </vbox>
        <vbox pack="end">
          <button id="cvPhFax-button"
                  label="call"
                  oncommand="callCall( 'cvPhFax' );"
          />
        </vbox>
      </hbox>
      <hbox align="center">
        <vbox flex="1">
          <description class="CardViewText" id="cvPhCellular" />
        </vbox>
        <vbox pack="end">
          <button id="cvPhCellular-button"
                  label="call"
                  oncommand="callCall( 'cvPhCellular' );"
          />
        </vbox>
      </hbox>
      <hbox align="center">
        <vbox flex="1">
          <description class="CardViewText" id="cvPhPager" />
        </vbox>
        <vbox pack="end">
          <button id="cvPhPager-button"
                  label="call"
                  oncommand="callCall( 'cvPhPager' );"
          />
        </vbox>
      </hbox>
    </vbox>
  </vbox>
</overlay>

встроить в оверлей родительского окна элемента обработчик onload

Все получается, только вот тут бы еще чуток поподробней. :)

Спасибо, уже не надо. Протупил.

window.addEventListener("load", my_function(), false);