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

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№108-03-2013 13:49:55

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Добавить кнопку в menu bar

Добрый день!
Нужно написать небольшое расширение, которое добавит кнопочку в меню бар (напр. Tools->MyButton).
В гайде нашёл информацию о добавлении времени в статус бар, который в xul файле именуется statusbar. Как именуется меню-бар, и как внести нужную кнопку именно в Tools или File?

Отсутствует

 

№208-03-2013 15:46:39

banbot
Moderator
 
Группа: Moderators
Зарегистрирован: 23-12-2007
Сообщений: 5291

Re: Добавить кнопку в menu bar

Тема перенесена из форума «Thunderbird» в форум «Разработка».


Do you feel lucky, punk?

Отсутствует

 

№308-03-2013 17:29:03

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Re: Добавить кнопку в menu bar

Спасибо, на английском тяжело вникнуть так что ещё остались вопросы.

Выделить код

Код:

<?xml version="1.0"?>
<overlay id="sample" mlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<menu label="Mymenu">
  <menupopup>
    <menuitem label="M1"/>
    <menuitem label="M2"/>
  </menupopup>
</menu>
</overlay>

Вот такой xul ломает окно Thunderbird'а и ничего не делает. Хотя всё как в примере xul school.

Отсутствует

 

№408-03-2013 20:55:47

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Re: Добавить кнопку в menu bar

okkamas_knife пишет

shatalov
выложи расширение целиком Загрузки
да и на какой версии [thunderbird] пробуешь? в последних они там много поменяли и возможно в примерах это упущено.

Залил http://forum.mozilla-russia.org/uploaded/ish.zip .
Нужно для начала просто кнопочку вывести в меню - уже радость будет. А затем по клику диалоговое окно.
Версия 17.0.3

Отсутствует

 

№508-03-2013 21:43:57

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: Добавить кнопку в menu bar

shatalov
Куда должно добавляться меню?

https://developer.mozilla.org/en-US/docs/XUL_Overlays
https://developer.mozilla.org/en-US/doc … l/Overlays

И там опечатка: вместо «xmlns» написано «mlns».

Вот пример:

Выделить код

Код:

<?xml version="1.0"?>
<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<menubar id="mail-menubar">
  <menu label="Mymenu" insertafter="tasksMenu">
    <menupopup>
      <menuitem label="M1"/>
      <menuitem label="M2"/>
    </menupopup>
  </menu>
</menubar>
</overlay>

А дальше можно в DOM Inspector'е посмотреть и заменить «<menubar id="mail-menubar"> ... </menubar>» и «insertafter="tasksMenu"» на нужное.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№608-03-2013 22:55:42

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Re: Добавить кнопку в menu bar

Infocatcher пишет

shatalov
Куда должно добавляться меню?

https://developer.mozilla.org/en-US/docs/XUL_Overlays
https://developer.mozilla.org/en-US/doc … l/Overlays

И там опечатка: вместо «xmlns» написано «mlns».

Вот пример:

Выделить код

Код:

<?xml version="1.0"?>
<overlay id="sample" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<menubar id="mail-menubar">
  <menu label="Mymenu" insertafter="tasksMenu">
    <menupopup>
      <menuitem label="M1"/>
      <menuitem label="M2"/>
    </menupopup>
  </menu>
</menubar>
</overlay>

А дальше можно в DOM Inspector'е посмотреть и заменить «<menubar id="mail-menubar"> ... </menubar>» и «insertafter="tasksMenu"» на нужное.

Ага, работает, спасибо. Инспектора поставил, как в него мой xul файл залить? Есть по нему похожий мануал? Вообще в меню tools надо и на клик перевод на js скрипт overlay.js.

Отсутствует

 

№709-03-2013 00:36:47

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: Добавить кнопку в menu bar

shatalov пишет

Инспектора поставил, как в него мой xul файл залить? Есть по нему похожий мануал?

https://developer.mozilla.org/en-US/doc … _Inspector
Еще есть кнопка Attributes Inspector для Custom Buttons.

shatalov пишет

Вообще в меню tools надо

Тогда что-нибудь вроде

Выделить код

Код:

<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <script type="application/javascript" src="overlay.js" />
    <menupopup id="taskPopup">
        <menuitem label="Label" insertafter="addonsManager" oncommand="ishCommand();" />
    </menupopup>
</overlay>
shatalov пишет

и на клик перевод на js скрипт overlay.js.

И overlay.js:

Выделить код

Код:

function ishCommand() {
    alert("Hello!");
}

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№809-03-2013 01:41:31

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Re: Добавить кнопку в menu bar

Infocatcher пишет
shatalov пишет

Инспектора поставил, как в него мой xul файл залить? Есть по нему похожий мануал?

Выделить код

Код:

<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <script type="application/javascript" src="overlay.js" />
    <menupopup id="taskPopup">
        <menuitem label="Label" insertafter="addonsManager" oncommand="ishCommand();" />
    </menupopup>
</overlay>
shatalov пишет

и на клик перевод на js скрипт overlay.js.

И overlay.js:

Выделить код

Код:

function ishCommand() {
    alert("Hello!");
}

Спасибо большое, всё отлично работает и за мануалы отдельное!

okkamas_knife пишет

попробовал, помучался плюнул, почитал мануалы разобрал примеры, (до этого расширения только чуток правил так что считай с нуля),
короче вот расширение-пример
добавляет пункт меню в меню файл, добавляет менюшку,добавляет кнопку для тулбара.
практически шаблон. зы менюшка с какойто фигнёй типа пимпочки вышла но мне уже лень дальше это ковырять.
внутри есть кратенькое ридми

Ок, спасибо, гляну!

Отредактировано shatalov (09-03-2013 01:42:59)

Отсутствует

 

№910-03-2013 00:11:23

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Re: Добавить кнопку в menu bar

И ещё один вопросец: возможно вызывать внешние программы из xul? или js заменить на другой скрипт, который сможет вызвать внешнюю программу/терминал etc? Все под linux

Отсутствует

 

№1010-03-2013 00:45:53

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: Добавить кнопку в menu bar

shatalov пишет

вызывать внешние программы

https://developer.mozilla.org/en-US/doc … nsIProcess


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1110-03-2013 18:09:32

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Re: Добавить кнопку в menu bar

Infocatcher пишет
shatalov пишет

вызывать внешние программы

https://developer.mozilla.org/en-US/doc … nsIProcess

Ага, спасибо, программу вызывает если использовать последний пример по ссылке. А если это будет bash скрипт, который возвращает значение - можно его прочитать и занести в переменную?

Отсутствует

 

№1210-03-2013 19:50:13

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Re: Добавить кнопку в menu bar

okkamas_knife пишет

только извращённым способом либо через буфер обмена либо через файл,это если обходиться голым жабаскриптом.
другие варианты требуют написания и компиляции бинарных компонентов.

А если скрипт запишет данные файл, с него можно будет считать?

Отсутствует

 

№1310-03-2013 21:16:35

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: Добавить кнопку в menu bar

shatalov пишет

А если это будет bash скрипт, который возвращает значение - можно его прочитать и занести в переменную?

Есть какой-то nsIPipe, но не факт, что он тут вообще может помочь.

shatalov пишет

А если скрипт запишет данные файл, с него можно будет считать?

Можно: https://developer.mozilla.org/en-US/doc … s/File_I_O


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1414-03-2013 16:31:43

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Re: Добавить кнопку в menu bar

Пришлось перенести скрипт на TB 3.1, вышла ошибка

Ошибка: file.initWithPath is not a function
Источник: chrome://ish/content/overlay.js
Строка: 17

Выделить код

Код:

function runsh(){
// create an nsIFile for the executable
    var file = Components.classes["@mozilla.org/file/local;1"]
                     .createInstance(Components.interfaces.nsIFile);
    file.initWithPath("/usr/local/bin/change_ad_passwd.sh");
     
    // create an nsIProcess
    var process = Components.classes["@mozilla.org/process/util;1"]
                        .createInstance(Components.interfaces.nsIProcess);
    process.init(file);

Чем можно исправить?
При замене объявления файла на

Выделить код

Код:

Components.utils.import("resource://gre/modules/FileUtils.jsm");
 
var file = new FileUtils.File("/usr/local/bin/change_ad_passwd.sh");

Ошибка

Ошибка: FileUtils.File is not a constructor
Источник: chrome://ish/content/overlay.js
Строка: 20

Отсутствует

 

№1514-03-2013 18:02:27

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Re: Добавить кнопку в menu bar

okkamas_knife пишет

shatalov
попробуй проделать
var file = Components.classes["@mozilla.org/file/local;1"]
                     .createInstance(Components.interfaces.nsIFile);
    file.initWithPath("/usr/local/bin/change_ad_passwd.sh");
сменив путь для начала на проверенное место где не нужны косые в пути возможно в линухе своя фишка с путями
поиграй с
("/file.txt")
("\file.txt")
("//file.txt")
("\\file.txt")
("file.txt")
лучше кинуть 2 файла один в рут другой в usr с разным содержимым чтоб понять к какому именно обращается
после того как найден рабочий вариант добавь папку и перекинув файл туда и также вычисли какой вариант косых используется в пути.
зы также вполне может быть что тебе надо запускать не change_ad_passwd.sh а саму интерпретирующую оболочку которой передавать этот файл в качестве аргумента.

Потыкал, но не помогло. Так первоначально делалось всё на линухе, только TB был 17. Следовательно проблема явно в верссии TB. Что-то TB3 не поддерживает, и я так понимаю должна быть замена?

Отсутствует

 

№1614-03-2013 18:26:42

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: Добавить кнопку в menu bar

shatalov
Документацию надо было читать. :)

Выделить код

Код:

.createInstance(Components.interfaces.nsILocalFile || Components.interfaces.nsIFile);

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1714-03-2013 19:07:02

shatalov
Участник
 
Группа: Members
Зарегистрирован: 08-03-2013
Сообщений: 11
UA: Firefox 19.0

Re: Добавить кнопку в menu bar

Infocatcher пишет

shatalov
Документацию надо было читать. :)

Выделить код

Код:

.createInstance(Components.interfaces.nsILocalFile || Components.interfaces.nsIFile);

да, работает, спасибо) не нашёл этого в документации =(

Отсутствует

 

№1814-03-2013 22:53:19

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 20.0

Re: Добавить кнопку в menu bar

shatalov пишет

не нашёл этого в документации =(

Выделить код

Код:

var file = Components.classes["@mozilla.org/file/local;1"]
                     .createInstance(Components.interfaces.nsIFile); // Создается экземпляр nsIFile
    file.initWithPath("/usr/local/bin/change_ad_passwd.sh"); // Но "file.initWithPath is not a function"

Можно проверить "initWithPath" in file и убедиться, что такого свойства вообще нет.
А далее посмотреть про nsIFile: void initWithFile(in nsIFile aFile); Requires Gecko 14.
Или поискать сразу про initWithPath.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

Board footer

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