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

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

№126-04-2009 14:42:52

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1988
UA: Firefox 3.0

Создание кнопок

Напишите пожалуйста как можно создать кнопки к пункту "настроить" какого нибудь расширения, и пунктам меню.


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№226-04-2009 15:58:29

ololo
Забанен
 
Группа: Members
Зарегистрирован: 07-04-2009
Сообщений: 70
UA: Firefox 3.0

Re: Создание кнопок

кнопки можно создавать через custom buttons или custom buttons 2, спросите в соответствующем топике.

Отсутствует

 

№326-04-2009 17:04:29

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1988
UA: Firefox 3.0

Re: Создание кнопок

А есть какогй нибудь мануал по написанию различных кнопок в custom buttons?


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№426-04-2009 17:20:48

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

Re: Создание кнопок

http://forum.mozilla-russia.org/viewtop … 00#p304200

Точнее, есть различные материалы по JavaScript, есть https://developer.mozilla.org/ (в основном на английском, хотя есть и https://developer.mozilla.org/ru).
И есть DOM Inspector, позволяющий посмотреть, как сделан тот или иной элемент самого Firefox или какого-нибудь расширения.
Ну, и исходный код Firefox тоже есть (довольно существенная часть там как раз на JavaScript).

А чтобы конкретно и про кнопки – такого нету.

Отредактировано Infocatcher (26-04-2009 17:24:03)


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

Отсутствует

 

№526-04-2009 18:18:13

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

Re: Создание кнопок

Najlus

Напишите пожалуйста как можно создать кнопки к пункту "настроить" какого нибудь расширения, и пунктам меню.

Мне проще код написать, чем объяснить.
Если надо открыть диалог настроек какого-нибудь расширения, который обычно открывается через "Инструменты" -> "Дополнения" -> "Настройки", то вот код:

Выделить код

Код:

var extname = "Custom Buttons";
var em = Components. classes ["@mozilla.org/extensions/manager;1"]. getService (Components. interfaces. nsIExtensionManager);
var exts = em. getItemList (Components. interfaces. nsIUpdateItem. TYPE_EXTENSION, {});
for (var i = 0; i < exts. length; i++)
{
	if (exts [i]. name == extname)
	{
		var rs = Components. classes ["@mozilla.org/rdf/rdf-service;1"].
			 getService (Components. interfaces. nsIRDFService);
		var res = rs. GetResource ("urn:mozilla:item:" + exts [i]. id);
		var ds = em. datasource;
		var res2 = rs. GetResource ("http://www.mozilla.org/2004/em-rdf#optionsURL");
		var t = ds. GetTarget (res, res2, true);
		if (t instanceof Components. interfaces. nsIRDFLiteral)
			openOptionsDialog (t. Value);
	}
}
function openOptionsDialog (optionsURL)
{
	var windows = Components. classes ['@mozilla.org/appshell/window-mediator;1'].
				  getService (Components. interfaces. nsIWindowMediator).
				  getEnumerator (null);
	while (windows. hasMoreElements ())
	{
		var win = windows. getNext ();
		if (win. document. documentURI == optionsURL)
		{
			win. focus ();
			return;
		}
	}
	
	var features;
	try
	{
		var instantApply = custombuttonsUtils. getPrefs ("browser.preferences.instantApply");
		features = "chrome,titlebar,toolbar,centerscreen" + (instantApply? ",dialog=no": ",modal");
	}
	catch (e)
	{
		features = "chrome,titlebar,toolbar,centerscreen,modal";
	}
	openDialog(optionsURL, "", features);
}

В первой строке надо заменить "Custom Buttons" на название нужного расширения. Например:

Выделить код

Код:

var extname = "Adblock Plus";

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

Выделить код

Код:

document. getElementsByAttribute ("label", "Дополнения") [0]. doCommand ();

или

Выделить код

Код:

document. getElementsByAttribute ("label", "Дополнения") [0]. click ();

где "Дополнения" надо заменить на название соответствующего пункта меню.


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

Отсутствует

 

№628-04-2009 10:39:33

3Jlou
Участник
 
Группа: Members
Зарегистрирован: 14-08-2008
Сообщений: 211
UA: Firefox 3.0

Re: Создание кнопок

В моей сборке использована кнопка для быстрого доступа к настройкам каждого расширения правым кликом по кнопке дополнений (cкриншот). При левом клике окно дополнений открывается в боковухе, при среднем клике - в новой вкладке (Исходник кнопки брал вроде с сайта CustomButtons2).

Код кнопки (вставить в поле "Инициализация"):

Выделить код

Код:

this.url2xul= 'chrome://mozapps/content/extensions/extensions.xul';
this.onClick= function(e)
{
	switch (e.button)
	{
		case 0: 
			openWebPanel(this.tooltipText, this.url2xul); 
			break;
		case 1: 
		{
			var t= gBrowser.mTabs;
			var current= content.document.location.href;
			var i= t.length;
			if (current==this.url2xul) gBrowser.removeCurrentTab(); 
			else while (true)
			{
				if (--i<0) 
				{
					if (current=='about:blank') // replace blank tab
						loadURI(this.url2xul);
					else // add new tab 
						gBrowser.selectedTab= gBrowser.addTab(this.url2xul); 
					break;
				};
				if (t[i].linkedBrowser.currentURI.spec==this.url2xul) // popup loaded
				{
					gBrowser.selectedTab= gBrowser.tabContainer.childNodes[i]; 
					break;
				};
			};
		}; break;
	};
};
this.setAttribute('onclick','this.onClick(event);');

const Cb = custombuttons;
const EXTENSION = Ci.nsIUpdateItem.TYPE_EXTENSION;

function prop( aElement, aString ) {
  var emRDF = "http://www.mozilla.org/2004/em-rdf#";
  var arc = RDFService.GetResource(emRDF+ aString);
  var target = extensionDS.GetTarget(aElement, arc, true);
  if(target instanceof Ci.nsIRDFLiteral) return target.Value;
  if(target instanceof Ci.nsIRDFInt) return target.Value;
  return null;
}

var cloneCBcontext = {
  cloneItems: function(aNode, aID, aSeparate) {
    var menupopup = document.getElementById(aID).cloneNode(true);
    var menuitems = menupopup.childNodes.length;
    for(var i = 0; i < menuitems; i++)
      aNode.appendChild(menupopup.firstChild);
    if(aSeparate)
      aNode.appendChild(document.createElement("menuseparator"));
  },
  makeMenu: function(aNode) {
    var m = aNode.appendChild(document.createElement("menu"));
    m.setAttribute("label", "Custom Button");
    m.setAttribute("oncommand", "event.stopPropagation()");
    var mp = m.appendChild(document.createElement("menupopup"));
    cloneCBcontext.cloneItems(mp, "custombuttons-contextpopup");
    aNode.insertBefore(document.createElement("menuseparator"), m);
  }
}




const popupID = "cbContext-extensionsButton";

var test = document.getElementById(popupID);
if(test) test.parentNode.removeChild(test);

var main = document.getElementById("mainPopupSet");
var cPopup = main.appendChild(document.createElement("popup"));
cPopup.id = popupID;
cPopup.setAttribute("oncommand",
  "event.stopPropagation(); document.popupNode.openPrefs(event);")



var RDFService  = Cc["@mozilla.org/rdf/rdf-service;1"].getService(Ci.nsIRDFService);
var Container   = Cc["@mozilla.org/rdf/container;1"].getService(Ci.nsIRDFContainer);
var extensionDS = Cc["@mozilla.org/extensions/manager;1"].getService(Ci.nsIExtensionManager).datasource;

var root;
try {
  root = RDFService.GetResource("urn:mozilla:item:root");
} catch(err) {
  root = RDFService.GetResource("urn:mozilla:extension:root");
}

Container.Init(extensionDS,root);

var elements = Container.GetElements();
var extensionArray = [];
var i = -1;
while(elements.hasMoreElements()) {
  i++;
  var element=elements.getNext();
  element.QueryInterface(Components.interfaces.nsIRDFResource);
  var prop_OptionsURL = prop(element, "optionsURL");
  if(prop(element, "type") == EXTENSION &&  prop_OptionsURL) {
    var prop_name = prop(element, "name");
    extensionArray[i] = [];
    extensionArray[i] [0] = prop_name.charAt(0).toUpperCase() + prop_name.substr(1);
    extensionArray[i] [1] = prop_OptionsURL;
    extensionArray[i] [2] = prop(element, "userDisabled");
    extensionArray[i] [3] = prop(element, "version");
    extensionArray[i] [4] = prop(element, "iconURL");
    if(!extensionArray[i] [4])
      extensionArray[i] [4] = "chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png";
  }
}

extensionArray.sort();

var features = "chrome, dialog = 0, resizable, titlebar, toolbar, centerscreen";

var extCommand = "window.openDialog('ZZZ', '', '" + features + "');";

for(var i = 0; i < extensionArray.length; i++) {
  var extArray = extensionArray[i];
  try {
    var mItem = document.createElement("menuitem");
    mItem.setAttribute("label", extArray[0] + " " + extArray[3]);
    if(extArray[4]) {
      mItem.setAttribute("class", "menuitem-iconic bookmark-item");
      mItem.setAttribute("image", extArray[4]);
    }
    if(extArray[1])
      mItem.setAttribute("oncommand", extCommand.replace("ZZZ", extArray[1]));
    if(extArray[2]) mItem.setAttribute("disabled", true);
    cPopup.appendChild(mItem);
  } catch(e) {
  }
}

cloneCBcontext.makeMenu(cPopup);
this.setAttribute("context", popupID);

if(typeof Local_Install != "object") return;

var test = document.getElementById("cbContext-extensions");
if(test) test.parentNode.removeChild(test);

var cbPopup = document.getElementById("custombuttons-contextpopup-subCall").cloneNode(true); // Cb context

// var subPopup = document.createElement("menupopup");

// subPopup.appendChild(cbPopup);
// subPopup.appendChild(cbPopup.lastChild);

var subMenu = document.createElement("menu");
subMenu.setAttribute("label", "Custom Button");
subMenu.setAttribute("image", Cb.defaultImg() );
subMenu.appendChild(cbPopup.lastChild);

var extensionsPopup = document.getElementById("emb-context");
var popup = extensionsPopup.cloneNode(true);
popup.id = "cbContext-extensions";
popup.appendChild(document.createElement("menuseparator"));
popup.appendChild(subMenu);
//popup.appendChild(subPopup);

extensionsPopup.parentNode.appendChild(popup);

this.setAttribute("context", popup.id);
this.onclick = function(aEvent) {
  if(aEvent.button === 1) gBrowser.selectedTab = gBrowser.addTab('chrome://mozapps/content/extensions/extensions.xul?type=extensions');
}

this.style.opacity = '.65';
this.setAttribute( 'onmouseover', 'custombuttons.ButtonBrt(event);' );
this.setAttribute(  'onmouseout', 'custombuttons.ButtonDim(event);' );

Отредактировано 3Jlou (29-04-2009 11:04:44)

Отсутствует

 

№728-04-2009 15:25:35

MySh
Кактусогрыз
 
Группа: Extensions
Зарегистрирован: 17-12-2006
Сообщений: 4623
UA: Firefox 3.0

Re: Создание кнопок

А возможно ли получить быстрый доступ к настройкам из about:config (то есть, менять, нажимая на кнопку) через это расширение?

Отсутствует

 

№828-04-2009 19:10:06

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

Re: Создание кнопок

MySh пишет

А возможно ли получить быстрый доступ к настройкам из about:config (то есть, менять, нажимая на кнопку) через это расширение?

Менять настройки можно, вот пример: http://forum.mozilla-russia.org/viewtopic.php?pid=308700#p308700


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

Отсутствует

 

№928-04-2009 20:42:54

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1988
UA: Firefox 3.0

Re: Создание кнопок

А как прописать кнопки зарытия, свёртывания и развёртывания(полный экран)?


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№1028-04-2009 21:43:32

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

Re: Создание кнопок

Najlus пишет

А как прописать кнопки

зарытия

Выделить код

Код:

close ();

свёртывания

Выделить код

Код:

minimize ();

развёртывания

Выделить код

Код:

maximize ();

(полный экран)

Выделить код

Код:

fullScreen = true;

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

Отсутствует

 

№1129-04-2009 14:14:09

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1988
UA: Firefox 3.0

Re: Создание кнопок

Спасибо большое


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№1229-04-2009 15:02:24

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1988
UA: Firefox 3.0

Re: Создание кнопок

Сори что опять надоедаю *виновато улыбается* а как отключить кнопку изменения размера окна внизу слева (в статусбаре), а ещё желательнее убрать совсем.
ЗЫ Organize StatusBar такого сделать не может

Отредактировано Najlus (29-04-2009 15:03:26)


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№1329-04-2009 15:14:18

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

Re: Создание кнопок

Najlus пишет

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

Слева ли? =)
userChrome.css:

Выделить код

Код:

statusbar > .statusbar-resizerpanel {
  display: none !important;
}

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

Отсутствует

 

№1429-04-2009 15:25:21

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1988
UA: Firefox 3.0

Re: Создание кнопок

Infocatcher пишет

Слева ли? =)

сори =) сёдня практика была =) а за код спасибо.
ЗЫ его можно просто в stylish использовать =)

Отредактировано Najlus (29-04-2009 15:42:33)


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№1529-04-2009 17:34:08

MySh
Кактусогрыз
 
Группа: Extensions
Зарегистрирован: 17-12-2006
Сообщений: 4623
UA: Firefox 3.0

Re: Создание кнопок

Anton

Менять настройки можно, вот пример: http://forum.mozilla-russia.org/viewtopic.php?pid=308700#p308700

Спасибо, как раз то, что надо.

Отредактировано MySh (29-04-2009 17:34:23)

Отсутствует

 

№1629-04-2009 17:35:37

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

Re: Создание кнопок

Najlus пишет

ЗЫ его можно просто в stylish использовать =)

Угу, но тогда лучше добавить в начало

Выделить код

Код:

@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);

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

Отсутствует

 

№1729-04-2009 19:14:12

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1988
UA: Firefox 3.0

Re: Создание кнопок

а что оно даёт?


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№1829-04-2009 19:56:46

wolwerine
╒╤╬╧╣╠═╝
 
Группа: Members
Зарегистрирован: 15-04-2009
Сообщений: 159
UA: Minefield 3.6

Re: Создание кнопок

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

Отсутствует

 

№1929-04-2009 19:57:35

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

Re: Создание кнопок

Najlus пишет

а что оно даёт?

Это нечто вроде области применения.

Можно сравнить

Выделить код

Код:

@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
* { color: red !important; }

и

Выделить код

Код:

* { color: red !important; }

в Stylish.


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

Отсутствует

 

№2029-04-2009 20:41:27

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

Re: Создание кнопок

wolwerine пишет

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

Возможно.
Код примерно такой:

Выделить код

Код:

var toolbarName = "Панель навигации";
var toolbar = document. getElementsByAttribute ("toolbarname", toolbarName) [0];
toolbar. collapsed = !toolbar. collapsed;
document. persist (toolbar. id, "collapsed");

где "Панель навигации" надо заменить на название нужной панели инструментов.


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

Отсутствует

 

№2129-04-2009 20:53:47

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1988
UA: Firefox 3.0

Re: Создание кнопок

понятно, спасибо. а есть какой нибудь мануал на русском по about:config?
И как можно удалить ненужные кнопки при вборе пункта "настройка" в контекстном меню тулбаров. если никак то напишите пожалуйста коды кнопок перезагрузки браузера, открытия менеджера дополнений, открытия about:config в новой вкладке и https://addons.mozilla.org/ru/firefox/.
И можно ли как нибудь убрать windows'овскую рамку вокруг браузера?

Отредактировано Najlus (29-04-2009 21:01:19)


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№2229-04-2009 21:23:09

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

Re: Создание кнопок

Najlus пишет

есть какой нибудь мануал на русском по about:config?

Наверху есть ссылка "MozUtil". Где-то там

И как можно удалить ненужные кнопки при вборе пункта "настройка" в контекстном меню тулбаров. если никак то

Интересная логика : )

Выделить код

Код:

menuitem[label="Панель навигации"]
{
	display: none !important;
}

в userChrome.css


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

Отсутствует

 

№2330-04-2009 14:25:26

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1988
UA: Firefox 3.0

Re: Создание кнопок

ЭЭЭ а что делает этот код? я чёто разобраться немогу


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

№2430-04-2009 15:36:20

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

Re: Создание кнопок

Удаляет "...ненужные кнопки при вборе пункта "настройка" в контекстном меню тулбаров.".


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

Отсутствует

 

№2530-04-2009 15:41:51

Najlus
Рррррррррррь!
 
Группа: Extensions
Откуда: Город N
Зарегистрирован: 11-01-2009
Сообщений: 1988
UA: Firefox 3.0

Re: Создание кнопок

ничего он не удаляет


Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями

Отсутствует

 

Board footer

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