>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >Как получить собственный (уникальный) ID кнопки? http://forum.mozilla-russia.org/viewtopic.php?id=60882 |
difabor > 15-11-2013 13:00:35 |
Чтобы предотвратить проблемы, связанные с клонированием кнопок, использующих установку параметров в about:config, названия этих параметров д/б уникальны даже при полной идентичности кнопок. Поэтому, наверное, они должны содержать что-то, что будет различать даже клоны. По идее ID кнопки является таким дискриминатором. |
difabor > 15-11-2013 14:30:10 |
okkamas_knife пишет Я пытался так, но у меня не выходит |
bunda1 > 15-11-2013 20:35:28 |
difabor пишет
Вот пример: Выделить код Код:// Переключить джетпак от 29.07.2013. ................................ // Настройка функций кликов мыши для кнопки ................................ this.onclick = function(e) { // ЛКМ переключает джетпак указанный в 'about:config'.... if ( e.button == 0 ) { if ( !cbu.isPref( jetName ) ) { // если джетпак для переключения не указан alertsService.showAlertNotification( button.image, button.label, "Установите джетпак для переключения", false, "", null, ""); return; } button.toggle = false, jetpacksName = aPrefs.getValue( jetName, 0); AddonManager.getAddonsByTypes(["extension"], function(addons) { // переключить джетпак addons.forEach(function(addon, i) { if ( addons[i].name == jetpacksName ) { addons[i].userDisabled = !addons[i].userDisabled; cbu.setPrefs( jet, !addons[i].userDisabled ); button.toggle = true; } }); if ( button.toggle == false ) { // если джетпак для переключения не найден alertsService.showAlertNotification("chrome://global/skin/icons/error-16.png", button.label, "Джетпак для переключения не найден", false, "", null, ""); } }); } // СКМ открывает стандартную контекстную меню кнопки .... if ( e.button == 1 ) { gShowPopup(this) }; // ПКМ создаёт и открывает меню с джетпаками .... if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { e.preventDefault(); var node = document.getElementById(this.id + "-menuPopup"); if ( node ) node.parentNode.removeChild( node ); // удалить старое меню var menuPopup = document.getElementById("mainPopupSet").appendChild(document.createElement("menupopup")); // создать новое меню menuPopup.id = this.id + "-menuPopup"; AddonManager.getAddonsByTypes(["extension"], function(addons) { addons.forEach(function(addon, i) { if ( addons[i].operationsRequiringRestart > 0 ) return; var mItem = document.createElement("menuitem"); mItem.setAttribute("label", addons[i].name ); mItem.setAttribute("class", "menuitem-iconic"); mItem.setAttribute("image", addons[i].iconURL || addons[i].icon64URL || "chrome://mozapps/skin/extensions/extensionGeneric-16.png"); if ( addons[i].name == aPrefs.getValue( jetName, 0 ) ) mItem.setAttribute('style', 'color: red; font-weight: bold;'); mItem.addEventListener('click', function (e) { aPrefs.setValue( jetName, addons[i].name ); cbu.setPrefs( jet, addons[i].isActive ); setImage( this.image ); } ); menuPopup.appendChild(mItem); }); }); menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft"); } }; // Объявляем переменные для этой вкладки ................................ var button = this; var aPrefs = Application.prefs; var alertsService = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService); var num = _id.replace(/custombuttons-button/g, ""); // создать индивидуальные настройки для 'about:config' var jet = "CB" + num + ".toggleJetpacks"; var jetName = "CB" + num + ".toggleJetpacks.name"; if ( !cbu.isPref( jet ) ) cbu.setPrefs( jet, true ); // Подсказка для кнопки ................................ this.onmouseover = function() { // получить и обрезать подсказку .... var val = aPrefs.getValue( jetName, 0); val = ( val == 0 ) ? "не установлено" : val; var jetpacks = val.substring(0,50) + ( (val.length > 50) ? '....' : "" ); this.tooltipText = "Переключить: " + jetpacks + "\nЛ: Bключить - выключить \nС: CB Меню \nП: Открыть меню с джетпаками"; }; // Заменить иконку кнопки на иконку переключаемого джетпака ................................ function setImage( image ) { var link = custombuttons.makeButtonLink("edit", _id ); var param = custombuttons.cbService.getButtonParameters( link ).wrappedJSObject; param.image = image; custombuttons.cbService.installButton( param ); }; // Установить нужную иконку кнопки при старте браузера или при изменениях настроек ................................ function toggleImage() { cbu.getPrefs( jet ) ? button.style.filter = '' : button.style.filter = 'url("chrome://mozapps/skin/extensions/extensions.svg#greyscale")'; }; toggleImage(); gPrefService.addObserver( jet, toggleImage, false ); addDestructor(function() { gPrefService.removeObserver( jet, toggleImage, false ) }); // Иконка кнопки не больше 16px ................................ var icon = document.getAnonymousElementByAttribute( this, "class", "toolbarbutton-icon"); icon.style.width = "16px"; icon.style.height = "16px"; this.onDestroy = function () { var icon = document.getAnonymousElementByAttribute( this, "class", "toolbarbutton-icon"); icon.style.width = "16px"; icon.style.height = "16px"; }; 15-11-2013 20:38:56 Выделить код Код:var num = _id.replace(/custombuttons-button/g, ""); // создать индивидуальные настройки для 'about:config' var jet = "CB" + num + ".toggleJetpacks"; var jetName = "CB" + num + ".toggleJetpacks.name"; if ( !cbu.isPref( jet ) ) cbu.setPrefs( jet, true ); кнопка создаёт индивидуальную настройку в 'about:config' для себя на основе своего id |
bunda1 > 15-11-2013 23:03:32 |
Нет при дублировании кнопки джетпак может и не быть установлен для переключения. А вообще кнопка не удачная - проблема с иконками джетпаков |
difabor > 15-11-2013 23:56:04 |
А такой вопрос: отлаживается какой-то код. |
bunda1 > 16-11-2013 00:36:22 |
difabor пишет
Пример: Выделить код Код:// Создать строку в about:config если не существует, удалить при изменениях ................................ cbu.isPref("CB.demo", true ) addDestructor(function(reason) { alert(reason); cbu.clearPrefs("CB.demo"); }); 16-11-2013 00:39:21 |
bunda1 > 16-11-2013 16:44:38 |
okkamas_knife |