Здравствуйте
Подскажите пожалуйста как получить максимально подробный список(с целью скопировать в буфер обмена) установленных дополнений в Firefox, чтобы там были не только расширения (это я знаю как получить), но и установленные кастомные кнопки (для CB).
Отсутствует
preved
Надеюсь кнопка готовая кнопка для CB существенно сэкономит ваше время.
try { Cu.import("resource://custombuttons-modules/addons4.js", {}); } catch(ex) {} function gatherInfo(type) { var tmp = [], map = {}, sort = []; items.forEach(function(item) { if (item.type != type) return; var name = item.name ? item.name.toUpperCase() : "UNNAMED"; name += item.id tmp.push(name); map[name] = item; }); tmp.sort(); tmp.forEach(function(name) { sort.push(map[name]) }); var list = "", enabled = 0, disabled = 0; sort.forEach(function(item) { list += (item.name || "unnamed") + " " + (item.version || ""); if (item.type != "custombuttons" && (item.userDisabled || item.appDisabled)) { list += " [ выключен ]\n"; disabled++; return; } else if (item.type == "custombuttons") { var str = item.id; var id = str.substring(str.lastIndexOf("custombuttons-button"), str.length); var button = document.getElementById(id); if (!button) { list += " [ НЕ ВЫТАЩЕНА ]\n"; disabled++; return; } if (button.hasAttribute("initializeerror")) { list += " [ ОШИБКА ИНИЦИАЛИЗАЦИИ ]\n"; disabled++; return; } } enabled++; list += "\n"; }); return [enabled + disabled, enabled, disabled, list]; } var items = []; function extensionsCallback(extensions) { var list = ""; items = extensions; var info = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo); list += info.vendor + " " + info.name + " " + info.version + " (build " + info.appBuildID + ")\n"; list += "User Agent: " + navigator.userAgent + "\n\n"; for(var type in AddonManager.addonTypes) { var name; var addonType = AddonManager.addonTypes[type]; if (addonType.name) name = addonType.name; else if (addonType.id == "custombuttons") name = "Кнопки"; list += "*** " + name; var ext = gatherInfo(addonType.id); list += " ( Включено: " + ext[1] + ", Отключено: " + ext[2] + ", Всего: " + ext[0] + " )\n" + ext[3] + "\n"; } var dialog = '\ <?xml-stylesheet href="chrome://global/skin/"?>\n\ <dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"\n\ xmlns:html="http://www.w3.org/1999/xhtml"\n\ id="cbbExtensionsLister"\n\ persist="width height screenX screenY"\n\ title="Список расширений"\n\ width="640" height="480"\n\ buttons="accept,extra1"\n\ buttonlabelextra1="Копировать все…"\n\ onload="init()"\n\ ondialogextra1="copy()">\n\ <script type="application/x-javascript">\n\ <![CDATA[\n\ function init () {}\n\ function copy () {\n\ var tb = document.getElementById("addonslist");\n\ window.arguments[0].write((opener.navigator.platform.indexOf("Win") != -1) ? tb.value.replace(/\\n/g, "\\r\\n") : tb.value);\n\ tb.focus ();\n\ }\n\ ]]>\n\ </script>\n\ <textbox id="addonslist" flex="1" multiline="true" />\n\ </dialog>'; dialog = "data:application/vnd.mozilla.xul+xml," + encodeURIComponent(dialog); // var win = window.openDialog (dialog, "", "chrome,dependent,dialog=no,minimizable", custombuttonsUtils.gClipboard); var win = window.openDialog (dialog, "", "chrome,dependent,dialog=no", custombuttonsUtils.gClipboard); addEventListener("load", function() { var doc = win.document; var textbox = doc.querySelector("textbox"); textbox.value = list; textbox.inputField.selectionStart = textbox.inputField.selectionEnd = 0; }, true, win); } AddonManager.getAllAddons(extensionsCallback);
Отсутствует