Напишите пожалуйста как можно создать кнопки к пункту "настроить" какого нибудь расширения, и пунктам меню.
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
А есть какогй нибудь мануал по написанию различных кнопок в custom buttons?
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
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)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
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" на название нужного расширения. Например:
Что касается пунктов меню, тут всё зависит от конкретного случая. Можно попробовать
или
где "Дополнения" надо заменить на название соответствующего пункта меню.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
В моей сборке использована кнопка для быстрого доступа к настройкам каждого расширения правым кликом по кнопке дополнений (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)
Отсутствует
А возможно ли получить быстрый доступ к настройкам из about:config (то есть, менять, нажимая на кнопку) через это расширение?
Менять настройки можно, вот пример: http://forum.mozilla-russia.org/viewtopic.php?pid=308700#p308700
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
А как прописать кнопки зарытия, свёртывания и развёртывания(полный экран)?
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
А как прописать кнопки
зарытия
свёртывания
развёртывания
(полный экран)
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Спасибо большое
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Сори что опять надоедаю *виновато улыбается* а как отключить кнопку изменения размера окна внизу слева (в статусбаре), а ещё желательнее убрать совсем.
ЗЫ Organize StatusBar такого сделать не может
Отредактировано Najlus (29-04-2009 15:03:26)
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
а как отключить кнопку изменения размера окна внизу слева (в статусбаре), а ещё желательнее убрать совсем.
Слева ли?
userChrome.css:
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Слева ли?
сори сёдня практика была а за код спасибо.
ЗЫ его можно просто в stylish использовать
Отредактировано Najlus (29-04-2009 15:42:33)
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
ЗЫ его можно просто в stylish использовать
Угу, но тогда лучше добавить в начало
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
а что оно даёт?
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
а что оно даёт?
Это нечто вроде области применения.
Можно сравнить
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); * { color: red !important; }
и
в Stylish.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
а если расширение имеет свой тулбар, возможно сделать кнопку для его сокрытия\отображения?
приходится это делать через контекстное меню.
Возможно.
Код примерно такой:
var toolbarName = "Панель навигации"; var toolbar = document. getElementsByAttribute ("toolbarname", toolbarName) [0]; toolbar. collapsed = !toolbar. collapsed; document. persist (toolbar. id, "collapsed");
где "Панель навигации" надо заменить на название нужной панели инструментов.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
понятно, спасибо. а есть какой нибудь мануал на русском по about:config?
И как можно удалить ненужные кнопки при вборе пункта "настройка" в контекстном меню тулбаров. если никак то напишите пожалуйста коды кнопок перезагрузки браузера, открытия менеджера дополнений, открытия about:config в новой вкладке и https://addons.mozilla.org/ru/firefox/.
И можно ли как нибудь убрать windows'овскую рамку вокруг браузера?
Отредактировано Najlus (29-04-2009 21:01:19)
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
есть какой нибудь мануал на русском по about:config?
Наверху есть ссылка "MozUtil". Где-то там
И как можно удалить ненужные кнопки при вборе пункта "настройка" в контекстном меню тулбаров. если никак то
Интересная логика : )
в userChrome.css
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
ЭЭЭ а что делает этот код? я чёто разобраться немогу
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует
Удаляет "...ненужные кнопки при вборе пункта "настройка" в контекстном меню тулбаров.".
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
ничего он не удаляет
Вы ленивы, следовательно вы изобретательны (Граф Де Гиш)
Список настроек About:config на русском языке с пояснениями и рекомендациями
Отсутствует