>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Firefox http://forum.mozilla-russia.org/viewforum.php?id=4 >Создание кнопок http://forum.mozilla-russia.org/viewtopic.php?id=34260 |
Najlus > 26-04-2009 14:42:52 |
Напишите пожалуйста как можно создать кнопки к пункту "настроить" какого нибудь расширения, и пунктам меню. |
ololo > 26-04-2009 15:58:29 |
кнопки можно создавать через custom buttons или custom buttons 2, спросите в соответствующем топике. |
Najlus > 26-04-2009 17:04:29 |
А есть какогй нибудь мануал по написанию различных кнопок в custom buttons? |
Infocatcher > 26-04-2009 17:20:48 |
http://forum.mozilla-russia.org/viewtop … 00#p304200 Точнее, есть различные материалы по JavaScript, есть https://developer.mozilla.org/ (в основном на английском, хотя есть и https://developer.mozilla.org/ru). А чтобы конкретно и про кнопки – такого нету. |
Anton > 26-04-2009 18:18:13 |
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" на название нужного расширения. Например: Что касается пунктов меню, тут всё зависит от конкретного случая. Можно попробовать или где "Дополнения" надо заменить на название соответствующего пункта меню. |
3Jlou > 28-04-2009 10:39:33 |
В моей сборке использована кнопка для быстрого доступа к настройкам каждого расширения правым кликом по кнопке дополнений (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);' ); |
MySh > 28-04-2009 15:25:35 |
А возможно ли получить быстрый доступ к настройкам из about:config (то есть, менять, нажимая на кнопку) через это расширение? |
Anton > 28-04-2009 19:10:06 |
MySh пишет
Менять настройки можно, вот пример: http://forum.mozilla-russia.org/viewtopic.php?pid=308700#p308700 |
Najlus > 28-04-2009 20:42:54 |
А как прописать кнопки зарытия, свёртывания и развёртывания(полный экран)? |
Anton > 28-04-2009 21:43:32 |
Najlus пишет
|
Najlus > 29-04-2009 14:14:09 |
Спасибо большое |
Najlus > 29-04-2009 15:02:24 |
Сори что опять надоедаю *виновато улыбается* а как отключить кнопку изменения размера окна внизу слева (в статусбаре), а ещё желательнее убрать совсем. |
Infocatcher > 29-04-2009 15:14:18 |
Najlus пишет
Слева ли? |
Najlus > 29-04-2009 15:25:21 |
Infocatcher пишет
сори сёдня практика была а за код спасибо. |
MySh > 29-04-2009 17:34:08 |
Anton
Спасибо, как раз то, что надо. |
Infocatcher > 29-04-2009 17:35:37 |
Najlus пишет
Угу, но тогда лучше добавить в начало |
Najlus > 29-04-2009 19:14:12 |
а что оно даёт? |
wolwerine > 29-04-2009 19:56:46 |
а если расширение имеет свой тулбар, возможно сделать кнопку для его сокрытия\отображения? |
Infocatcher > 29-04-2009 19:57:35 |
Najlus пишет
Это нечто вроде области применения. Можно сравнить Выделить код Код:@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); * { color: red !important; } и в Stylish. |
Anton > 29-04-2009 20:41:27 |
wolwerine пишет
Возможно. Выделить код Код:var toolbarName = "Панель навигации"; var toolbar = document. getElementsByAttribute ("toolbarname", toolbarName) [0]; toolbar. collapsed = !toolbar. collapsed; document. persist (toolbar. id, "collapsed"); где "Панель навигации" надо заменить на название нужной панели инструментов. |
Najlus > 29-04-2009 20:53:47 |
понятно, спасибо. а есть какой нибудь мануал на русском по about:config? |
Anton > 29-04-2009 21:23:09 |
Najlus пишет
Наверху есть ссылка "MozUtil". Где-то там
Интересная логика : ) в userChrome.css |
Najlus > 30-04-2009 14:25:26 |
ЭЭЭ а что делает этот код? я чёто разобраться немогу |
Anton > 30-04-2009 15:36:20 |
Удаляет "...ненужные кнопки при вборе пункта "настройка" в контекстном меню тулбаров.". |
Najlus > 30-04-2009 15:41:51 |
ничего он не удаляет |
ПротопопулуS > 30-04-2009 15:44:02 |
А Вы куда код прописываете-то? |
Najlus > 30-04-2009 19:39:50 |
в stylish. возможно мою просьбу не так поняли... |
Anton > 30-04-2009 20:37:30 |
Najlus пишет
Надо изложить чётче, что требуется. |
Najlus > 30-04-2009 21:17:55 |
Использую расширение toolbar buttons, а точнее лишь несколько кнопок из него, причем неиспользуемые кнопки висят в этом диалоговом окне мёртвым грузом и затрудняют поиск нужной кнопки (например с вновь установленного дополнения) |
Anton > 30-04-2009 21:36:58 |
Najlus пишет
Должна помочь вот эта: http://codefisher.org/toolbar_button/toolbar_button_maker страница |
Infocatcher > 30-04-2009 22:56:21 |
Еще вот такой стиль может пригодиться: Выделить код Код:/*** Настройка панелей инструментов ***/ /* Зеленый фон при наведении на элементы, которые можно перетащить (очень удобно хватать разделители) */ toolbarpaletteitem[place="toolbar"]:hover, toolbarpaletteitem[place="palette"]:hover { background-color: #cfc !important; } /* Компактный вид списка доступных кнопок */ /* Основано на http://userstyles.org/styles/547 */ /* allow any number of columns in Customize Toolbar box */ #palette-box { float: left !important; overflow-x: hidden !important; } #palette-box .paletteRow { display: inline !important; } #palette-box toolbarpaletteitem { display: inline !important; margin: 0 !important; padding: 8px !important; } #palette-box toolbarpaletteitem > hbox, #palette-box toolbarpaletteitem label { display: inline !important; } /* fix separator */ #wrapper-separator #separator { display: inline !important; font-size: 40px !important; } /* make all buttons' text be on the bottom - thanks Grist! */ #palette-box toolbarpaletteitem toolbarbutton { -moz-box-orient: vertical !important; text-align: center !important; } |
Najlus > 01-05-2009 13:35:04 |
А как сделать чтобы лис при нажатии на кнопку открывал вебсайт, и как сделать кнопку для перезагрузки лиса? |
ПротопопулуS > 01-05-2009 14:12:01 |
Najlus пишет
Может проще на панели закладок разместить нужную?!! |
Najlus > 01-05-2009 14:48:24 |
может и проще, но не то |
Sid > 01-05-2009 14:54:20 |
Najlus
http://codefisher.org/toolbar_button/link-button-maker
http://codefisher.org/toolbar_button/to … flag=ru-RU Это если не заморачиваться с Custom Buttons. |
Najlus > 01-05-2009 15:48:37 |
Sid пишет
"Несовместимо с Mozilla Firefox 3.0.10" |
Anton > 01-05-2009 16:05:40 |
Najlus пишет
Скорее всего, xpi скачался не полностью. Выделить код Код:this. url = "http://ya.ru"; this. onclick = function (event) { if (event. button != 2) openUILink (this. url, event); } в раздел "Инициализация". |
Najlus > 01-05-2009 16:20:55 |
Спасибо именно это мне и нужно было |
Anton > 01-05-2009 16:35:41 |
или или |
Najlus > 01-05-2009 16:43:15 |
А зачем тот код надо было прописывать в инициализации? всё работает только при getBrowser (). selectedTab = getBrowser (). addTab ("http://ya.ru") в коде кнопки |
Anton > 01-05-2009 16:54:50 |
Najlus пишет
А тогда кнопка работает почти как закладка. По левой кнопке открывает в текущем табе, по средней - в новом. Najlus пишет
Неверно. Всё работает не только при при "getBrowser (). selectedTab...". |
Najlus > 02-05-2009 11:48:18 |
Да я имею ввиду что достаточно только этой строки чтобы кнопка работала |
wolwerine > 02-05-2009 14:52:14 |
Anton пишет
ага, помогло. ипользовал Custom Buttons² v3.0.0. |
Najlus > 20-06-2009 16:16:00 |
А что нужно прописать для обновления всех открытых вкладок? |
Infocatcher > 20-06-2009 18:09:00 |
Najlus пишет
|
Najlus > 20-06-2009 18:39:59 |
Спасибо |
Najlus > 21-06-2009 18:47:57 |
А можно ли как нибудь сделать так, чтобы он не обновлял FastDial ( chrome://fastdial/content/fastdial.html ) |
=Agasfer= > 21-06-2009 18:53:32 |
Использую Reload Every - настройка автообновления выбранных вкладок через заданные промежутки времени. Очень удобно. Для каждой вкладки установил свой период обновления от 1 до 15 минут. На Fast Dial и GMail - отключил. |
Najlus > 21-06-2009 18:57:03 |
Не, автообновление это не то, мне нужно самому запускать процесс |
Infocatcher > 21-06-2009 19:53:37 |
Najlus пишет
Примерно так: Выделить код Код:var notReload = ["chrome://fastdial/content/fastdial.html"]; var nl = notReload.length; var curBr = gBrowser.mCurrentTab.linkedBrowser; reloadBrowser(curBr); var brs = gBrowser.browsers, br; for(var i = 0, len = brs.length; i < len; i++) { br = brs[i]; if(br != curBr) reloadBrowser(br); } function reloadBrowser(br) { if(canReload(br.currentURI.spec)) br.reload(); } function canReload(uri) { uri = uri.toLowerCase(); for(var i = 0; i < nl; i++) if(uri.indexOf(notReload[i]) == 0) return false; return true; } Пример: |
Najlus > 22-06-2009 14:30:41 |
спасибо а на каком языке всё это пишется? |
Anton > 22-06-2009 14:42:40 |
Najlus пишет
На русском. |
Najlus > 22-06-2009 14:44:23 |
Я имею ввиду язык программирования, и Русским там и не попахивает. |
Anton > 22-06-2009 14:50:38 |
Najlus > 22-06-2009 15:17:17 |
А где можно найти список компонент с свойствами? |
Anton > 22-06-2009 15:27:47 |
Najlus пишет
Сложно ответить на такой сильно общий вопрос. "Компоненты" разные бывают. |
Najlus > 22-06-2009 15:38:21 |
я имею ввиду список компонент с свойствами Firefox |
Anton > 22-06-2009 15:53:59 |
Najlus пишет
Что Вы понимаете под "компонентой" и далее, "компонентой со свойствами Firefox" ? |
Najlus > 22-06-2009 16:00:27 |
ну к примеру адрес текущего таба (вроде бы): gBrowser.mCurrentTab.linkedBrowser. есть где нибудь спсок, где прописаны эти своего рода "адреса" (эт очень буквально я так назвал) |
Anton > 22-06-2009 16:18:25 |
Najlus пишет
Вряд ли есть такие списки. |
Najlus > 22-06-2009 16:43:02 |
слышал что существует какойто DOM inspektor, а он с чем работает? |
Крошка Ру > 22-06-2009 19:10:12 |
Najlus |
Najlus > 22-06-2009 19:59:19 |
Для чего нужен DOM так и не понял, а зачем ссылка на расширение? |
Крошка Ру > 22-06-2009 20:11:36 |
Najlus
ну я тоже не особо разобрался, там для много чего ..... |
Najlus > 22-06-2009 20:34:47 |
Крошка Ру пишет
Да знаю я что есть только зачем именно он понять не могу |
Крошка Ру > 22-06-2009 20:57:19 |
Najlus ну вот пример > пост № 710 |
Najlus > 23-06-2009 16:54:28 |
Ну кажись примерно понял зачем этот DOM inspektor |