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

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

№190124-07-2010 04:36:28

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 3.6

Re: Custom Buttons

okkamas_knife мммм.... а зачем это - file.initWithPath("C:\\WINDOWS\\system32\\taskkill.exe"); ?

PS Программа то работает просто Console2 ругается... пока не понял на что.

Отредактировано Indomito (24-07-2010 04:39:05)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№190224-07-2010 07:35:29

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 3.6

Re: Custom Buttons

А вот так не проще? Или будет проблема с параметрами?

скрытый текст

Выделить код

Код:

startProcess("C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe"," ", "-turbo");

function startProcess(path,sps,args){
if (args.length) path +=(sps)?" "+ args:""+args ;

var file = Components
  .classes["@mozilla.org/file/local;1"]
  .createInstance(Components.interfaces.nsILocalFile);

file.initWithPath(path.substr (0, (sps)?path.length-++args.length:path.length-args.length));
    if(file.exists(path.substr (0,(sps)?path.length-++args.length:path.length-args.length))) file.launch();
             else custombuttons. alertBox ("Файл не найден", path);
};

пишет

а вообще лучше юзай код  что я несколько страниц назал приводил

там та же ошибка... странно как то...

Отредактировано Indomito (24-07-2010 08:30:14)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№190324-07-2010 12:09:26

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

Re: Custom Buttons

Indomito пишет

Ошибка: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsILocalFile.initWithPath]
Источник: custombutton://buttons/Firefox/code/custombuttons-button29
Строка: 6

Надо убрать строку

Выделить код

Код:

startProcess("", [""]);
CowSayMoo пишет

по моему вопросу ни у кого ни каких идей больше нету? :/ :cry:

Там по ссылке, непонятно о чём речь. Нужны подробности.


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

Отсутствует

 

№190424-07-2010 12:18:14

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 3.6

Re: Custom Buttons

okkamas_knife про ошибку... я проверился на.... :)  ну в общем взял пример из  MDN / Code snippets ошибка та же и уходит в недра nsIPromptService, что видимо они поменяли, но это не ошибка в глобальном понятии JS, ошибка в типизации (кажется или недостаточность параметров или хз..), чего - я пока не понял, но твой код честно работает, а диагностика из за включённой Console2 . Просто мне так удобнее, те она постоянно у меня работает/включена в AiOS.

А мой код не передаёт параметры, хотя ошибку не вызывает ))))


Anton спасибо за ответ, а я всё голову ломал - зачем это написано :)

Отредактировано Indomito (24-07-2010 12:21:51)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№190524-07-2010 21:43:11

CowSayMoo
Участник
 
Группа: Members
Зарегистрирован: 21-07-2010
Сообщений: 10
UA: Firefox 3.6

Re: Custom Buttons

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

- замарачиваться со скриптами непосредственно в ОС, чтоб при загрузке домашнего компа с виндой скрип шёл на фтп, который на рабочем компе, на котором Линукс, который почти ни когда не выключается, находил там наш файлик, который заблаговременно другой скрипт, например в cron'e, через n-ый промежуток времени сначала анализиров не изменилось ли чего там, а потом кидал обратно на фтп, так вот наш виндовый скрипт его бы тоже анализировал и скачивал, а ещё при выключении проверял... и т.д.

уффф... и чую с моими практически ни какими познаниями в скриптологии, отсутствием свободного времени и двух компов в секундной доступности для тестов - задача весьма и весьма...:/

Отсутствует

 

№190624-07-2010 22:59:47

CowSayMoo
Участник
 
Группа: Members
Зарегистрирован: 21-07-2010
Сообщений: 10
UA: Firefox 3.6

Re: Custom Buttons

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

Отсутствует

 

№190725-07-2010 02:31:10

CowSayMoo
Участник
 
Группа: Members
Зарегистрирован: 21-07-2010
Сообщений: 10
UA: Firefox 3.6

Re: Custom Buttons

вобщем решил я свою задачу - поставил на обе машины DropBox и указал путь для tabbookmarks.xml в папку DropBox'a. Очень порадовало, что Дроп умеет инкрементальную синхронизацию на лету

Отредактировано CowSayMoo (25-07-2010 02:33:37)

Отсутствует

 

№190826-07-2010 17:41:44

Chis
Участник
 
Группа: Members
Зарегистрирован: 12-03-2009
Сообщений: 55
UA: Firefox 3.6

Re: Custom Buttons

Подскажите, при использовании MozBackup кнопки сохраняются?

Отредактировано Chis (26-07-2010 17:42:39)

Отсутствует

 

№190926-07-2010 18:41:41

Chis
Участник
 
Группа: Members
Зарегистрирован: 12-03-2009
Сообщений: 55
UA: Firefox 3.6

Re: Custom Buttons

Хочу поиграться со шрифтом и цветом шрифта в кнопке Weather(enter city code in Initialization).
Размер и тип шрифта нашел. Почему не каждый шрифт правильно отображается (например Times New Roman, который в браузере по умолчанию)?
Как поменять цвет шрифта?

Отсутствует

 

№191027-07-2010 08:57:35

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 3.6

Re: Custom Buttons

okkamas_knife я тут хотел сделать "финт ушами", но обломался....
ты как то писал код для смены browser.download.dir (с вызовом диалога на Desk) по сути вещь нужная и может полезная, но...

1. При вызове "Save as..." идет проверка browser.download.lastDir и при  "" то предлагается директория
из browser.download.dir и она заносится в browser.download.lastDir. (грубо говоря)
2. При последующих вызовах опять проверка на длину и если не ноль, то предлагается записать уже browser.download.lastDir.
3. Отличие browser.download.dir и browser.download.lastDir не рассматривается, всегда предлагается записать в browser.download.lastDir если она не ""

Вопрос:
1. считать из browser.download.dir у меня получается:

var pref = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch); 
var setdir = pref.getCharPref('browser.download.dir');

2. а вот запись в browser.download.lastDir не проходит, естественно в Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);  должен быть другой метод класса, но какой я так и не нашёл.

Задача: просто считать из browser.download.dir и просто записать в browser.download.lastDir


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№191127-07-2010 17:11:45

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

Re: Custom Buttons

Indomito пишет

2. а вот запись в browser.download.lastDir не проходит, естественно в Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);  должен быть другой метод класса, но какой я так и не нашёл.

http://www.google.ru/search?hl=ru&newwi … =&gs_rfai=
=> https://developer.mozilla.org/en/nsIPre … Pref.28.29

Но для не ASCII-символов надо использовать https://developer.mozilla.org/en/nsIPre … alue%28%29.
Для примера можно посмотреть resource://gre/components/fuelApplication.js:

Выделить код

Код:

setValue : function prefs_sv(aName, aValue) {

и chrome://global/content/nsUserSettings.js:

Выделить код

Код:

setUnicharPref: function (aPrefName, aPrefValue)
Indomito пишет

Задача: просто считать из browser.download.dir и просто записать в browser.download.lastDir

Если не нужна поддержка старых версий, то так:

Выделить код

Код:

Application.prefs.setValue("browser.download.lastDir", Application.prefs.getValue("browser.download.dir", ""));

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

Отсутствует

 

№191227-07-2010 23:34:52

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher сразу спрашиваю что бы не порушить about:config :)

Выделить код

Код:

var oAboutCfg = Application.prefs.getValue("browser.download.dir", ""); 
// Тут проверям и тд...
var iAboutCfg = "C:\\Custom Buttons\\";
Application.prefs.setValue("browser.download.lastDir", iAboutCfg,"");

1. За что отвечает второй параметр в Application.prefs.getValue и в Application.prefs.setValue
2. Если данной переменной нет в about:config, то она просто создаётся или есть код возврата? Если он есть то как его считать... я не нашёл ну или плохо искал.


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№191328-07-2010 00:05:27

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

Re: Custom Buttons

Indomito пишет

1. За что отвечает второй параметр в Application.prefs.getValue и в Application.prefs.setValue

https://developer.mozilla.org/en/Toolki … d_overview

Indomito пишет

2. Если данной переменной нет в about:config, то она просто создаётся или есть код возврата? Если он есть то как его считать... я не нашёл ну или плохо искал.

https://developer.mozilla.org/en/Toolki … #has.28.29
Если без «оберток», то нужно сравнивать nsIPrefBranch.getPrefType() с PREF_INVALID.


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

Отсутствует

 

№191428-07-2010 19:50:43

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher плз, взгляни на фрагмент кода

скрытый текст

Выделить код

Код:

/*Initialization Code*/
var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              xmlns:cb="http://xsms.nm.ru/custombuttons/"
              onclick="this. parentNode. handleClick (event);">
              
        <menuitem label="Set default download dir"
                  class="menuitem-iconic"
                  cb:open="0"/>

        <menuitem label="Скриншоты"
                  class="menuitem-iconic"
                  cb:open="C:\SCR\"/>

        <menuitem label="ICO для Custom Buttons"
                  class="menuitem-iconic"
                  cb:open="C:\Custom Buttons\База значков\"/>

        <menuitem label="Set new default download dir"
                  class="menuitem-iconic"
                  cb:open="1"/>
                  
      </menupopup>;


this.handleClick = function(event) {

    if(event.button == 0) {
// Действие при клике ЛКМ
alert (0);
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
//*******************************************
this. appendChild (custombuttonsUtils. makeXML (menu));
this. type = "menu";
this. orient = "horizontal";

var menuitem = event. target;
var open = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "open");
//****************************************************
this. open = false;
mbMouse (open);        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов

    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        this. open = false;
        event.preventDefault();
        event.stopPropagation();
    }
};

это попытка что бы выпадающее меню сработало по не по ЛКМ, а ПКМ.  Ошибок компиляции нет, ошибок выполнения нет... что то не верно, а вот что? :(
Если блок отмеченный //******** перенести выше то начинается отработка по ЛКМ и всё работает верно... или всё определение меню перенести в область обработки по СКМ? Но, я это делал - не помогло (естественно убирал onclick="this. parentNode. handleClick (event);"> )


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№191528-07-2010 22:34:42

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

Re: Custom Buttons

Indomito
Нигде в коде нет обработки кликов по самой кнопке.
А добавление меню реализовано в функции, которая никогда не будет вызвана, пока... не будет добавлено меню.
И нет кода для показа меню.


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

Отсутствует

 

№191629-07-2010 17:21:21

sanb
Участник
 
Группа: Members
Зарегистрирован: 24-11-2006
Сообщений: 120
UA: Firefox 3.6

Re: Custom Buttons

сори за тупой вопрос, а в чём отличие http://custombuttons2.com/ Custom Buttons² от сабжа?
и можно ли прикрутить эту http://custombuttons2.com/ru/forum/buttons/buttons-database/clear-cache-no-prompt.html кнопку через сабж?

короче нужно прикрутить к seamonkey кнопку для очистки кеша памяти (RAM)
помогите, впервые столкнулся с custom buttons
заранее благодарен

Отсутствует

 

№191729-07-2010 18:44:36

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

Re: Custom Buttons

sanb пишет

можно ли прикрутить эту http://custombuttons2.com/ru/forum/buttons/buttons-database/clear-cache-no-prompt.html кнопку через сабж

Можно. После установки надо добавить в начало раздела инициализации такие строки:

Выделить код

Код:

var Cc = Components. classes;
var Ci = Components. interfaces;
var cb2String;

Добавлено 29-07-2010 18:53:57
ps:

sanb пишет

короче нужно прикрутить к seamonkey кнопку для очистки кеша памяти (RAM)

Если надо очистить только кэш памяти, надо будет ещё убрать строку

Выделить код

Код:

cacheService.evictEntries(Ci.nsICache.STORE_ON_DISK);

Или просто в раздел "Код" новой кнопки

Выделить код

Код:

var cs = Components. classes ["@mozilla.org/network/cache-service;1"]. getService (Components. interfaces. nsICacheService);
cs. evictEntries (Components. interfaces. nsICache. STORE_IN_MEMORY);

Отредактировано Anton (29-07-2010 18:54:38)


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

Отсутствует

 

№191830-07-2010 09:14:44

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher сорри от жары совсем отупел :) естественно работать не будет :) Я про то что писал выше... так теперь постараюсь чётко сформулировать вопрос.
Код

скрытый текст

Выделить код

Код:

/*Initialization Code*/
// *************Start DEF*******************
//******Secion #1 ****************
var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              xmlns:cb="http://xsms.nm.ru/custombuttons/"
              onclick="this. parentNode. handleClick (event);">
        <menuitem label="Set default download dir"
                  class="menuitem-iconic"
                  cb:open="0"/>

        <menuitem label="Скриншоты"
                  class="menuitem-iconic"
                  cb:open="C:\SCR\"/>

        <menuitem label="ICO для Custom Buttons"
                  class="menuitem-iconic"
                  cb:open="C:\Custom Buttons\База значков\"/>

        <menuitem label="Set new default download dir"
                  class="menuitem-iconic"
                  cb:open="1"/>
                  
      </menupopup>;
//**************END seciom****************

//******Secion #2 ****************
this. appendChild (custombuttonsUtils. makeXML (menu));
this. type = "menu";
this. orient = "horizontal";
//**************END seciom****************

//******Secion #3 ****************
this.handleClick = function(event) {
    if(event.button == 0) {
    // Действие при клике ЛКМ
    alert (0);
//this. open = false;
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
    var menuitem = event. target;
    var open = menuitem. getAttributeNS ("http://xsms.nm.ru/custombuttons/", "open");
    alert (1);
this. open = false;        
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
    alert (2);
//this. open = false;        
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        //this. open = false;
        event.preventDefault();
        event.stopPropagation();
    }
};

//**************END seciom****************
// *************END DEF*******************

поделён на три секции. В первой секции есть указание на использование обработчика onclick, а секция 2 написана ошибочно, точнее получается на событие два кода, но ни тот и не другой не работают верно.
Мне то что нужно что бы
1. Меню появлялось на заданное мной событие, те одна из кнопок мыши, а не по ЛКМ.
2. После появления меню  работал второй обработчик, тоже желательно что бы он был зависим от разных событий.

Я попытался это реализовать через this. leftclick = function (event) {};  this. midclick = function (event) {}; this. rightclick = function (event) {} в контексте this.setAttribute('onclick', 'gQuot(event, this)'); получилось ещё хуже, точнее тоже самое - меню упорно выпадает по ЛКМ.


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№191930-07-2010 12:56:26

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 3.6

Re: Custom Buttons

okkamas_knife поясни зачем ты используешь конструкцию try/catch/finally в

Выделить код

Код:

//Открыть установленные дополнения
try{ BrowserOpenAddonsMgr(); } catch(e) { BrowserOpenExtensions('extensions'); }

если ошибка (исключение) возникает то в catch, а не в try

Console2 пишет

Ошибка: BrowserOpenExtensions is not defined
Источник: chrome://custombuttons/content/cbbutton.js
Строка: 297

или это для совместимости с старыми версиями  мозиллы или судя по коду версиями Custom Buttons?

Может следует написать try{ BrowserOpenExtensions('extensions'); } catch(e) { BrowserOpenAddonsMgr();} или иную более сложную конструкцию, хотя тут TRY всегда отработает, даже без наличия дополнений.
Хотя можно поставить проверку, ну как говорится мало ли.... try{ BrowserOpenExtensions('extensions'); } catch(e) { if (error(e)) alert ("Ошибка='+e)} catch(e) { BrowserOpenAddonsMgr();}

Проясни плз.


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№192030-07-2010 17:51:18

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 3.6

Re: Custom Buttons

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

Может быть, стоит добавить в расширение возможность создавать (а потом удалять) невидимые кнопки, не занимающие места в интерфейсе?

Отредактировано luitzen (30-07-2010 17:51:39)

Отсутствует

 

№192130-07-2010 18:06:20

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

Re: Custom Buttons

luitzen пишет

Может быть, стоит добавить в расширение возможность создавать (а потом удалять) невидимые кнопки, не занимающие места в интерфейсе?

Есть же userChromeJS.
Плюс версия для Firefox 4.0, правда, не от автора.


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

Отсутствует

 

№192230-07-2010 18:06:53

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 3.6

Re: Custom Buttons

luitzen ну по сути почти не кликабельная кнопка пока одна, которую мне помог сделать Infocatcher это сканирование буфера обмена и создание стека, который я потом использую для вставки BB - кода. Я про список Готовые кнопки для Custom Buttons, ибо что делают другие не понятно, тк они их не публикуют на форуме.
По сути у меня была идея про подобное предложение, но подумав я понял что такое не нужно.
Если нужна инициализация чего либо, то это (весь совокупный код) можно вместить в одну кнопку и добавив интерфейс для выбора что с этим потом делать.... ИМХО


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№192330-07-2010 18:48:44

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

Re: Custom Buttons

luitzen
В TODO есть, но на очень далекую перспективу. На далекую - потому, что надо делать интерфейс для редактирования этих кодов, и модель выполнения придумать, а идей по их реализации у меня пока нет.
К тому же вот и userChromeJS есть, и keyconfig, в оверлее CustomButtons тоже можно размещать какой-нибудь код (скрипты/xul, вручную, естественно).


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

Отсутствует

 

№192430-07-2010 18:57:34

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

Re: Custom Buttons

Indomito пишет

1. Меню появлялось на заданное мной событие, те одна из кнопок мыши, а не по ЛКМ.

Тогда не нужно делать кнопку-меню (this. type = "menu";) и показывать меню по нужному событию «вручную».

Indomito пишет

2. После появления меню  работал второй обработчик, тоже желательно что бы он был зависим от разных событий.

Вообще, для меню рекомендуется использовать oncommand, а он работает только по левой кнопке мыши и нажатию Enter, а также по клику правой кнопкой мыши для контекстного меню.

Меню

Выделить код

Код:

var menu = this._menu = custombuttonsUtils.makeXML(
    <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        onclick="this.parentNode.handleMenuClick(event);"
        onmouseup="this.parentNode.handleMenuMouseup(event);"
        oncommand="this.parentNode.handleMenuCommand(event);">
        <menuitem label="Item 0" />
        <menuitem label="Item 1" />
        <menuitem label="Item 2" />
    </menupopup>
);
this.appendChild(menu);

this.showMenu = function(menu, e, isContext) {
    document.popupNode = this.ownerDocument.popupNode = this;
    if("openPopupAtScreen" in menu)
        menu.openPopupAtScreen(e.screenX, e.screenY, isContext);
    else
        menu.showPopup(this, e.screenX, e.screenY, isContext ? "context" : "popup", null, null);
};

this.removeAttribute("context");
this.onclick = function(e) {
    if(e.target != this)
        return;
    if(e.button == 0) {
        // Some left-click action...
        alert("Button left-click");
    }
    if(e.button == 1) {
        // Some middle-click action...
        //this.showMenu(this._menu, e, false);
    }
    else if(e.button == 2) {
        if(e.ctrlKey || e.shiftKey || e.altKey || e.metaKey) {
            this.showMenu(document.getElementById("custombuttons-contextpopup"), e, true);
            return;
        }
        // Some right-click action...
        alert("Button right-click");
    }
};
this.onmousedown = function(e) {
    if(e.button == 1) {
        this._menuOpenerButton = e.button;
        this.showMenu(this._menu, e, false);
    }
};
this.handleMenuClick = function(e) {
    alert("Menu click\n" + e.target.getAttribute("label") + "\nButton: " + e.button);
    closeMenus(e.target); // chrome://browser/content/utilityOverlay.js
};
this.handleMenuMouseup = function(e) {
    if(e.target.localName != "menupopup" && e.button == this._menuOpenerButton) {
        alert("Menu mouseup\n" + e.target.getAttribute("label"));
        closeMenus(e.target);
    }
};
this.handleMenuCommand = function(e) {
    alert("Menu command\n" + e.target.getAttribute("label"));
};

Indomito пишет

или это для совместимости с старыми версиями  мозиллы или судя по коду версиями Custom Buttons?

В старых версиях Firefox нужно вызывать

Выделить код

Код:

BrowserOpenExtensions('extensions');

Скорее всего – в Firefox 1.5.


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

Отсутствует

 

№192530-07-2010 19:16:42

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher

Infocatcher пишет

Вообще, для меню рекомендуется использовать oncommand, а он работает только по левой кнопке мыши и нажатию Enter, а также по клику правой кнопкой мыши для контекстного меню.

да я понимаю, но уж больно много кнопок, те их раньше было намного больше 4-е панели и три панели закладок. Вот я и борюсь объединяя функционал при помощи разных кликов мыши, ну а СКМ это обычно установочная функция.


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

Board footer

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