Alex_one можно но я не знаю как)... он в 65 не копирует, в 62 пашет как я вижу?
Отредактировано func4ptch4 (05-02-2019 17:09:35)
Отсутствует
Приветствую, друзья!
Был вынужден обновиться с 47 FF до последней версии, так как старый добрый ФФ47 начал плохо работать
Сейчас ФФ65 но почти все мои дополнения не работают в том числе Custom Buttons
С офсайта скачивается но не устанавливается
http://custombuttons.mozdev.org/installation.html
custombuttons-0.0.5.5-20110628 пытался установить эту версию
Дайте пожалуйста живую ссылку на Custom Buttons для ФФ65
===
Судя по каментам в последних версиях ФФ custom buttons плохо работает.
Может быть мне стоит скачать одну из последних ФФ где custom buttons работает без проблем
Не подскажете ли какую ФФ установить чтобы все хорошо работало в связке FF CB и Stylish?
Отредактировано leex (07-02-2019 15:56:11)
Отсутствует
Остановился на 56 FF
Закинул в корень пару скриптов чтобы отключить проверку подписей приложений, но приложение для новой вкладки " New Tab King" работает криво.
Не отображается список с недавно закрытыми вкладками.
Альтернатив ему не нашел
В Waterfox приложение "New Tab King" работает также криво
Есть ли готовая кнопка, чтобы открывалась пустая страница со строкой поиска в вэб и со списком недавно закрытых вкладок?
Отредактировано leex (08-02-2019 17:29:47)
Отсутствует
Вопрос у вас в Clipboard такой код?
у меня на 65 вот такой код работает
/*Initialization Code*/ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Блок инициализации глоб. переменных и функций // срок существования - один сеанс браузера //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // bbBBCodeStat=true // разрешить/включить BBCode window.arycb_BBCodeClipboardStrings = this.clipboardStrings = []; // Массив буфера обмена // //******************************************************** //--------Общие функции для вставки BBCode---------------- //********************************************************* //++++++++++++++++++BEGIN DEF++++++++++++++++++++++++++++++ //-------------------------------------------------------- // Функция lb_BBCodePrim // [bbCode]выделенный[/bbCode] // по умолчанию от ЛКМ) lb_BBCodePrim = function (open,close){ var theBox = document.commandDispatcher.focusedElement; var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; var oPosition = theBox.scrollTop; var oHeight = theBox.scrollHeight; var text=theBox.value.substring(0,startPos); text +=open+theBox.value.substring(startPos, endPos)+close; text +=theBox.value.substring(endPos, theBox.value.length); theBox.value = text; var nHeight = theBox.scrollHeight - oHeight; theBox.scrollTop = oPosition + nHeight; }; //--------------------------------------------------------- // Функция mb_BBCodePrim // Резерв // по умолчанию от CКМ mb_BBCodePrim = function (open,close) {}; // ------------------------------------------------------- // Функция rb_BBCodePrim // [bbCode]параметр PASTE по умолчанию из буфер обмена[/bbCode] // по умолчанию от ПКМ rb_BBCodePrim = function (open,close,paste){ if (paste == undefined) { open +=close;} //буфер обмена пуст else { open +=paste+close;} var theBox = document.commandDispatcher.focusedElement; var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; var selectionLen = endPos - startPos var oPosition = theBox.scrollTop; var oHeight = theBox.scrollHeight; var text=theBox.value.substring(0,startPos); var nHeight = theBox.scrollHeight - oHeight; text +=open; text +=theBox.value.substring(endPos, theBox.value.length); theBox.value = text; theBox.selectionStart = endPos + open.length; theBox.selectionEnd = endPos + open.length - selectionLen; theBox.scrollTop = oPosition + nHeight; }; // ------------------------------------------------------- // Функция fHLD_Get_ListClipboardPrim // получить список сохранёного буфера обмена // fnHLD_Get_ListClipboardPrim = function (){ var cs = arycb_BBCodeClipboardStrings; return (cs.slice(0)); }; //++++++++++++++++++END DEF+++++++++++++++++++++++++++++++++++ //Список сохранёного буфера обмена //Не вызываем это, обработка по таймеру или по событию ЛКМ //-----Обработчики буфера обмена this.MAX_ENTRIES = 16; //Максимальное число записей 16 this.CHECK_INTERVAL = 1000; //Время опроса буфера 1000 миллисекунд this.type = "menu"; this.orient = "horizontal"; this._menupopup = this.appendChild(document.createElement("menupopup")); this._menupopup.setAttribute("oncommand", "this.parentNode.handleCommand(event.target);"); this.checkClipboard = function() { var clipStr = readFromClipboard(); if(clipStr && this.clipboardStrings.indexOf(clipStr) == -1) this.storeString(clipStr); }; this.storeString = function(str) { var cs = this.clipboardStrings; cs.push(str); while(cs.length > this.MAX_ENTRIES) cs.shift(); var mi = document.createElement("menuitem"); mi.setAttribute("label", str); this._menupopup.appendChild(mi); while(this._menupopup.childNodes.length > this.MAX_ENTRIES) this._menupopup.removeChild(this._menupopup.firstChild); }; this.handleCommand = function(mi) { var indx = Array.indexOf(mi.parentNode.childNodes, mi); if(indx != -1) this.insertText(this.clipboardStrings[indx]); }; this.insertText = function(str) { var cmd = "cmd_insertText"; var controller = document.commandDispatcher.getControllerForCommand(cmd); if(controller && controller.isCommandEnabled(cmd)) { controller = controller.QueryInterface(Components.interfaces.nsICommandController); var params = "createCommandParams" in Components.utils ? Cu.createCommandParams() : Components.classes["@mozilla.org/embedcomp/command-params;1"] .createInstance(Components.interfaces.nsICommandParams);; params.setStringValue("state_data", str); controller.doCommandWithParams(cmd, params); } }; setInterval(function(button) { button.checkClipboard(); }, this.CHECK_INTERVAL, this); this.setAttribute("onpopupshowing", "this.checkClipboard();"); var ios = Components.classes["@mozilla.org/network/io-service;1"]. getService(Components.interfaces.nsIIOService); var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]. getService(Components.interfaces.nsIStyleSheetService); var css = new String(); css = css + '@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");'; css = css + 'tooltip[label^="' + this.label + '\\000a\\000a"] {'; css = css + "-moz-appearance: none !important;"; css = css + "border: 1px solid silver !important;"; css = css + "max-width: none !important;"; css = css + "background: black !important;"; css = css + "color: silver !important;"; css = css + "font-family: monospace !important;"; css = css + "}"; var uss = ios.newURI("data:text/css," + encodeURIComponent(css), null, null); if (!sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.loadAndRegisterSheet(uss, sss.AGENT_SHEET); this.onDestroy = function(reason) { if (reason == "update") { if (sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.unregisterSheet(uss, sss.AGENT_SHEET); } if (reason == "delete") { if (sss.sheetRegistered(uss, sss.AGENT_SHEET)) sss.unregisterSheet(uss, sss.AGENT_SHEET); } } this.showClipboard = function() { var code = custombuttons.cbService.readFromClipboard(); this.tooltipText = code ? this.label + "\n\n" + code: this.label; } this.setAttribute("onmouseover", "this.showClipboard()");
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EClipboard%20Viewer%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArdJREFUeNpsU11IU2EYfs/Zt+Vy7sfKEZEp2pxmF2uKUVhq2VKwTB0FmT8FCUbgpTddBWFBICJRgVleRC5GUeRNpPZj+bfMrJZhajeWRTPa2mTnr/c77Iyj9cLD2fd97/PsOc/7HQawytMQW0AuhoF49a+rzmQYZp+yliTpSclP74yybh6QgHTuhdV1DeGkP6zPvNAyNONUDtp3Z/pgW7zPh2hiRQlADUEE5373SafVnu888eCtUxBYMBiMQJ90TffpOe2jKoQX/nEAtuYumOjthZHRp2A0GsGQmAgcx0EwGIQNpa1gq6qCR7dvyL1E+I9AKBKBEpcLvi0sANFoQMOywCJopaWno1MJFB6J8iu4DA3x+9ISrDebIctmkzcpQRRFWYRHJouinCLA8Wo2FG+0O/TJJhPf4/WOdns8U5i8VFdTk9vgdheggpbFJoLgYzyCYajrWPHZtk2evr6Rx2P+F1cvX8+gmxeudL7UaO+LtZWVeyLoQK9ywFIHKmRt3r7T8LC/f+xIZUPq5x98AkXt0VMZjwYHx3FIEF5eBh5fR3G+OgOgTSaLhUvS60hOqnkN3fsaCILRYokKSPyDAScmJYHCW+1gen5iOOQuK8t///GVP4FI4lotML6pockql2tHMByGZRyngKHGHYTCqIIT0hI5xPEv/g+HDzSeKdTqXgudd3ue0xALHY5d+dnZJfM41hSrFTSEwK9gTIDePpaRBSoKqutbXadbUu51tC+mZufkna+rK6JN/pHh0MXy0k+zkxMR5VXxT32ygDxnERodh+rPHb90M72rpWGur/tWW+A35OFRVqx/GnFHw8IAQooTaeXqAWpMME6tdjTVzxYZoMKuwxsHK2FWBZ2MjrcS+esE8g5D1fHgPahjYBHA84aDOeyxI6IILvaMqtZ8AC9mIBbiXwEGADy0Lb/f2n5rAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%20%0A%20%0A%20%0A%20%0AgCBClipboardViewer%20%3D%20this%3B%20//%20global%20obj%0A%0Athis.toString%20%3D%20function%20toString%28%29%20%7Breturn%20this.name%3B%7D%0A//this.xurl%20%3D%20%22chrome%3A//chromedir/content/clipboard-viewer.xul%22%3B%0Athis.xurl%20%3D%20%22data%3Aapplication/vnd.mozilla.xul+xml%3Bbase64%2C%22%20+%20%0A//encodeURIComponent%28btoa%28this.Help%29%29%3B%0AencodeURIComponent%28btoa%28unescape%28encodeURIComponent%28this.Help%29%29%29%29%3B%0A//encodeURIComponent%28btoa%28unescape%28encodeURIComponent%28this.xurl%29%29%29%29%3B%0A%20%20this.icon%20%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAArdJREFUeNpsU11IU2EYfs/Zt+Vy7sfKEZEp2pxmF2uKUVhq2VKwTB0FmT8FCUbgpTddBWFBICJRgVleRC5GUeRNpPZj+bfMrJZhajeWRTPa2mTnr/c77Iyj9cLD2fd97/PsOc/7HQawytMQW0AuhoF49a+rzmQYZp+yliTpSclP74yybh6QgHTuhdV1DeGkP6zPvNAyNONUDtp3Z/pgW7zPh2hiRQlADUEE5373SafVnu888eCtUxBYMBiMQJ90TffpOe2jKoQX/nEAtuYumOjthZHRp2A0GsGQmAgcx0EwGIQNpa1gq6qCR7dvyL1E+I9AKBKBEpcLvi0sANFoQMOywCJopaWno1MJFB6J8iu4DA3x+9ISrDebIctmkzcpQRRFWYRHJouinCLA8Wo2FG+0O/TJJhPf4/WOdns8U5i8VFdTk9vgdheggpbFJoLgYzyCYajrWPHZtk2evr6Rx2P+F1cvX8+gmxeudL7UaO+LtZWVeyLoQK9ywFIHKmRt3r7T8LC/f+xIZUPq5x98AkXt0VMZjwYHx3FIEF5eBh5fR3G+OgOgTSaLhUvS60hOqnkN3fsaCILRYokKSPyDAScmJYHCW+1gen5iOOQuK8t///GVP4FI4lotML6pockql2tHMByGZRyngKHGHYTCqIIT0hI5xPEv/g+HDzSeKdTqXgudd3ue0xALHY5d+dnZJfM41hSrFTSEwK9gTIDePpaRBSoKqutbXadbUu51tC+mZufkna+rK6JN/pHh0MXy0k+zkxMR5VXxT32ygDxnERodh+rPHb90M72rpWGur/tWW+A35OFRVqx/GnFHw8IAQooTaeXqAWpMME6tdjTVzxYZoMKuwxsHK2FWBZ2MjrcS+esE8g5D1fHgPahjYBHA84aDOeyxI6IILvaMqtZ8AC9mIBbiXwEGADy0Lb/f2n5rAAAAAElFTkSuQmCC%22%3B%0Athis.panel%20%3D%20false%3B%0A%20%0Athis.onclick%20%3D%20function%28aEvent%29%20%7B%0A%20%20if%20%28aEvent.button%20%3D%3D%201%29%20%7B%20//%20Middle%20click%0A%20%20%20%20this.togglePanel%28%29%3B%20%20%20%20%20//%20open%20in%20bottom%20panel%0A%0A%20%20%7D%0A%20%0A%20%20//%20This%20won%27t%20work%20for%20data%3AURI%20XUL%20on%20Firefox%204%0A%20%20else%20if%20%28aEvent.ctrlKey%20%20%7C%7C%20aEvent.metaKey%29%7B%0A%20%20%20%20aEvent.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20gBrowser.loadOneTab%28this.xurl%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20open%20in%20new%20tab%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20null%2C%20null%2C%20null%2C%20false%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.info%20%3D%20%22%5Cn%5C%0A%u041B%u041A%u041C%3A%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u043E%u043A%u043D%u0435%5Cn%5Cn%5C%0A%u0421%u041A%u041C%3A%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u043D%u0438%u0436%u043D%u0435%u0439%20%u043F%u0430%u043D%u0435%u043B%u0438%5Cn%5Cn%5C%0ACtrl+click%3A%20%u043E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u043D%u043E%u0432%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%5Cn%5Cn%22%3B%0A%0A%0Afunction%20%24%28aId%29%20%7B%0A%20%20return%20document.getElementById%28aId%29%3B%0A%7D%0A%0Athis.togglePanel%20%3D%20function%28%29%20%7B%0A%20%20this.panel%20%3D%20%21this.panel%3B%0A%20%20%24%28%22SClipboard-splitter%22%29.hidden%20%3D%20%21this.panel%3B%0A%20%20%24%28%22SClipboard-panel%22%29.hidden%20%3D%20%21this.panel%3B%0A%20%20%24%28%22SClipboard-iframe%22%29.setAttribute%28%22src%22%2C%20this.panel%20%3F%20this.xurl%20%3A%20%22%22%29%3B%0A%7D%0A%0A%0Athis.checkForCBWindow%20%3D%20function%28%29%20%7B%0A%20%20var%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%20%20var%20em%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%20%20var%20winName%20%3D%20%22clipview%22%3B%0A%20%20var%20index%20%3D%201%3B%0A%20%20while%20%28em.hasMoreElements%28%29%29%20%7B%0A%20%20%20%20let%20win%20%3D%20em.getNext%28%29%3B%0A%20%20%20%20if%28win.name%20%3D%3D%20winName%29%20%7B%0A%20%20%20%20%20%20win.focus%28%29%3B%0A%20%20%20%20%20%20return%20true%3B%0A%20%20%20%20%7D%0A%20%20%20%20index++%0A%20%20%7D%0A%20%20return%20false%3B%0A%7D%0A%0Athis.showTooltip%20%3D%20function%28aNode%29%20%7B%0A%20%20var%20win%20%3D%20this.checkForCBWindow%28%29%3B%0A%20%20if%20%28win%20%7C%7C%20this.opened%29%20%7B%0A%20%20%20%20aNode.label%20%3D%20this.info%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20aNode.label%20%3D%20readFromClipboard%28%29%20%3F%20readFromClipboard%28%29%20%3A%20this.info%3B%0A%7D%0A%0Afunction%20makeXML%28aXMLString%29%20%7B%0A%20%20return%20%28new%20DOMParser%29.parseFromString%28aXMLString%2C%20%22application/xml%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.documentElement%3B%0A%7D%0A%0Afunction%20%24xml%28aNode%2C%20aId%2C%20aXML%29%20%7B%0A%20%20var%20node%20%3D%20%24%28aId%29%3B%0A%20%20node%20%26%26%20node.parentNode.removeChild%28node%29%3B%0A%20%20aNode%20%26%26%20aNode.appendChild%28makeXML%28aXML%29%29%0A%7D%0A%0A%0A%0A%24xml%28%24%28%22appcontent%22%29%2C%0A%20%20%20%20%20%22SClipboard-splitter%22%2C%0A%20%20%20%20%20%27%3Csplitter%20xmlns%3D%22%27%20+%20xulns%20+%20%27%22%20id%3D%22SClipboard-splitter%22%27%0A%20%20%20+%20%27%20orient%3D%22vertical%22%20hidden%3D%22true%22%3E%27%0A%20%20%20+%20%27%3Cgrippy%20oncommand%3D%22this.parentNode.nextSibling.collapsed%20%3D%27%0A%20%20%20+%20%27%20%21this.parentNode.nextSibling.collapsed%3B%22/%3E%3C/splitter%3E%27%29%3B%0A%0A%24xml%28%24%28%22appcontent%22%29%2C%0A%20%20%20%20%20%22SClipboard-panel%22%2C%0A%20%20%20%20%20%27%3Cvbox%20xmlns%3D%22%27%20+%20xulns%20+%20%27%22%20id%3D%22SClipboard-panel%22%27%0A%20%20%20+%20%27%20height%3D%22300%22%20hidden%3D%22true%22%3E%27%0A%20%20%20+%20%27%3Ctoolbox%3E%3Ctoolbar%20align%3D%22center%22%3E%27%0A%20%20%20+%20%27%3Clabel%20value%3D%22%27%20+%20this.label%20+%20%27%22%20flex%3D%221%22%20crop%3D%22end%22/%3E%27%0A%20%20%20+%20%27%3Ctoolbarbutton%20class%3D%22tabs-closebutton%22%27%0A%20%20%20+%20%27%20image%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACt0lEQVQ4jaWSzUtUYRTGn/fcGZ25H+m9Iyne8fpFq4lGCsFFIW21NiKKuHIn4qpazDraabnMTVEh+Af0B0QIIohBowhlkM1MMTre+VLngzv3PW1SKWvVWR0eOL/zcM4jmBn/U4G/iTuzsyK7unoLUl4HABDtdExNbV1fXr60Tfzp4J1h3Dd1/ak1OHhN7+kBiHCaTsPd2NgrlMsP7x4fv/0nYE3XH9ix2GLbzIwQmvYbmCsVHL16xd+3tx/dOTl5dqbTWfPeMIavOs6COT0tmBmyWAS1toJaWyGLRbCUMKemxFXHWXhvGMOXACrw2BwdJYUITX190MbG4O/twf/yBdrYGJr6+6EQwbx3j1QhHv8GWDfNNjUavR3u6ACyWQRjMQRsG+rkJNSJCQRsG8FYDDKbRbi9Harj3F43zbYLB41Gr2bbRIUCFACnS0vwMhkEbBsB24aXyaCcSEDJZiFyOWidnYRGo/f8jQpQp9NTiFwOACCJACEuDsgMeXAAuC7YMECeBwWonwOaLOtT/evXMhTlSs00oS8vI2jbqGcyADOau7pgvHiB8vg4tMND1F233GRZn87pzIwtXX9eiEb5uLubC2/ecC2V4qOhIT4aGuJqKsX516/52HG4EI3ylq4/P5s7z8FHy2qXnvehOxTqDBGhFongiusCAMqWhVA+j5qU+Far/RDB4M2BfP7gUpCSLS03qr7/NiyEExEC6i+9AsBlRpU5FVaU+zdKpeSlHCSTSazOzW0XNW2gCjzZ9/3Pu77Pu77P+77/uQo8cTVt4OXMzM7a2tpFlBOJhFhZWWkulUphz/NUKWWYmUPM3GwCKgBRAKoA6kRUI6JKIBCo6rpeGRkZqQlmRjqdxuLiIm1ublIul6NKpaI0Gg3yfV8AABFxMBiUoVBIRiIRPx6Py/n5eRmPx/ETBvM/dPD/rBwAAAAASUVORK5CYII%3D%22%27%0A%20%20%20+%20%27%20oncommand%3D%22gCBClipboardViewer.togglePanel%28%29%3B%22/%3E%27%0A%20%20%20+%20%27%3C/toolbar%3E%3C/toolbox%3E%27%0A%20%20%20+%20%27%3Ciframe%20id%3D%22SClipboard-iframe%22%20src%3D%22%22%20flex%3D%221%22/%3E%27%0A%20%20%20+%20%27%3C/vbox%3E%27%29%3B%0A%20%20%20%0A%0A//%20Custom%20Tooltip%0A//%20http%3A//custombuttons.mozdev.org/drupal/node/645%0A%0Avar%20tooltip%20%3D%20this.appendChild%28document.createElement%28%22tooltip%22%29%29%3B%0Atooltip.style.MozAppearance%20%3D%20%22none%22%3B%0Atooltip.style.background%20%3D%20%22menu%22%3B%0Atooltip.style.color%20%3D%20%22menutext%22%3B%0Atooltip.style.opacity%20%3D%20%22.9%22%3B%0Atooltip.style.border%20%3D%20%221px%20solid%20menutext%22%3B%0Atooltip.style.borderRadius%20%3D%20%225px%22%3B%0Atooltip.style.MozBorderRadius%20%3D%20%225px%22%3B%0Atooltip.style.fontFamily%20%3D%20%22monospace%22%3B%0Atooltip.style.fontSize%20%3D%20%22medium%22%3B%0Atooltip.style.maxWidth%20%3D%20%28screen.width%20/%202%29%20+%20%22px%22%3B%0Atooltip.style.maxHeight%20%3D%20%28screen.height%20/%202%29%20+%20%22px%22%3B%20//%20not%20working%0Atooltip.style.padding%20%3D%20%221em%22%3B%0Atooltip.setAttribute%28%22onpopupshowing%22%2C%20%22this.parentNode.showTooltip%28this%29%3B%22%29%3B%0A%0Athis.removeAttribute%28%22tooltiptext%22%29%3B%0Athis.tooltip%20%3D%20%22_child%22%3B%0A%0A%0A%20%20%20%20%20%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0Avar%20em%20%3D%20ww.getWindowEnumerator%28%29%3B%0Avar%20winName%20%3D%20%22clipview%22%3B%0Avar%20index%20%3D%201%3B%0Awhile%20%28em.hasMoreElements%28%29%29%20%7B%0A%20%20let%20win%20%3D%20em.getNext%28%29%3B%0A%20%20if%28win.name%20%3D%3D%20winName%29%20%7B%0A%20%20%20%20win.focus%28%29%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20index++%0A%7D%0A%0AopenDialog%28this.xurl%2C%20winName%2C%20%22chrome%2C%20dialog%3Dno%2C%20centerscreen%2C%20minimizable%2C%20resizable%22%29%3B%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%26lt%3B%3Fxml%20version%3D%221.0%22%3F%26gt%3B%0A%26lt%3B%3Fxml-stylesheet%20type%3D%22text/css%22%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%0A%26lt%3Bdialog%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%20%20%20%20%20%20%20%20xmlns%3Ahtml%3D%22http%3A//www.w3.org/1999/xhtml%22%0A%20%20%20%20%20%20%20%20id%3D%22clipboard-viewer%22%0A%20%20%20%20%20%20%20%20width%3D%22800%22%20height%3D%22600%22%0A%20%20%20%20%20%20%20%20title%3D%22Clipboard%20viewer%22%0A%20%20%20%20%20%20%20%20buttons%3D%22extra1%2C%20extra2%2C%20cancel%22%0A%20%20%20%20%20%20%20%20buttonlabelextra1%3D%22%u041F%u0440%u0430%u0432%u043A%u0430%22%0A%20%20%20%20%20%20%20%20buttonlabelextra2%3D%22%u041E%u0447%u0438%u0441%u0442%u0438%u0442%u044C%22%0A%20%20%20%20%20%20%20%20buttonlabelcancel%3D%22%u0417%u0430%u043A%u0440%u044B%u0442%u044C%22%0A%20%20%20%20%20%20%20%20buttonaccesskeyextra1%3D%22E%22%0A%20%20%20%20%20%20%20%20buttonaccesskeyextra2%3D%22r%22%0A%20%20%20%20%20%20%20%20buttonaccesskeycancel%3D%22C%22%0A%20%20%20%20%20%20%20%20ondialogextra1%3D%22edit%28%29%3B%22%0A%20%20%20%20%20%20%20%20ondialogextra2%3D%22clearClipboard%28%29%3B%22%0A%20%20%20%20%20%20%20%20ondialogcancel%3D%22closeDialog%28%29%3B%22%0A%20%20%20%20%20%20%20%20onfocus%3D%22loadFromClipboard%28%29%3B%22%26gt%3B%0A%0A%20%20%26lt%3Bhtml%3Ahead%26gt%3B%0A%20%20%20%20%20%26lt%3Bhtml%3Astyle%20type%3D%22text/css%22%26gt%3B%0A%20%20%20%20%26lt%3B%21%5BCDATA%5B%23textbox%20%7B%0A%20%20%20%20%20%20font-family%3A%20monospace%3B%20font-size%3A%20medium%3B%20white-space%3A%20pre-wrap%3B%0A%20%20%20%20%7D%5D%5D%26gt%3B%0A%20%20%20%20%26lt%3B/html%3Astyle%26gt%3B%0A%20%20%26lt%3B/html%3Ahead%26gt%3B%0A%0A%20%20%26lt%3Bkeyset%26gt%3B%26lt%3Bkey%20keycode%3D%22VK_F5%22%20oncommand%3D%22loadFromClipboard%28%29%3B%22%20/%26gt%3B%26lt%3B/keyset%26gt%3B%0A%0A%20%20%26lt%3Bpopupset%26gt%3B%0A%20%20%20%20%26lt%3Bmenupopup%20id%3D%22contextmenu%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onpopupshowing%3D%22popupShowing%28event%29%3B%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onpopuphiding%3D%22loadFromClipboard%28%29%3B%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20oncommand%3D%22var%20cmd%20%3D%20event.originalTarget.getAttribute%28%27cmd%27%29%3B%0A%20if%20%28cmd%29%20document.popupNode.parentNode.doCommand%28cmd%29%3B%22%26gt%3B%0A%20%20%20%20%20%20%26lt%3Bmenuitem%20id%3D%22edit-copy%22%20label%3D%22%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%22%20accesskey%3D%22c%22%20cmd%3D%22cmd_copy%22%20/%26gt%3B%0A%20%20%20%20%20%20%26lt%3B%21--menuitem%20id%3D%22edit-delete%22%20label%3D%22%u0423%u0434%u0430%u043B%u0438%u0442%u044C%22%20accesskey%3D%22d%22%20cmd%3D%22cmd_delete%22%20/--%26gt%3B%0A%20%20%20%20%20%20%26lt%3Bmenuseparator%20/%26gt%3B%0A%20%20%20%20%20%20%26lt%3Bmenuitem%20id%3D%22edit-selectAll%22%20label%3D%22%u0412%u044B%u0431%u0440%u0430%u0442%u044C%20%u0432%u0441%u0435%22%20accesskey%3D%22a%22%20cmd%3D%22cmd_selectAll%22%20/%26gt%3B%0A%20%20%20%20%26lt%3B/menupopup%26gt%3B%0A%20%20%26lt%3B/popupset%26gt%3B%0A%0A%20%20%26lt%3Btextbox%20id%3D%22textbox%22%20multiline%3D%22true%22%20flex%3D%221%22%0A%20%20%20%20%20%20%20%20%20%20%20onclick%3D%22gmon_edit_mouseclick%28event%29%3B%22%0A%20%20%20%20%20%20%20%20%20%20%20context%3D%22contextmenu%22%20readonly%3D%22%22%20/%26gt%3B%0A%0A%20%20%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%26lt%3B%21%5BCDATA%5B%0Aconst%20Cc%20%3D%20Components.classes%3B%0Aconst%20Ci%20%3D%20Components.interfaces%3B%0A%0Aconst%20gTextbox%20%3D%20document.getElementById%28%22textbox%22%29%3B%0A%0Afunction%20getMainwin%28%29%20%7B%0A%20%20if%20%28window.frameElement%29%20%7B%0A%20%20%20%20return%20window.frameElement.ownerDocument.defaultView%3B%0A%20%20%7D%20else%20if%20%28window.opener%29%20%7B%0A%20%20%20%20return%20window.opener%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20return%20Cc%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20getService%28%29.QueryInterface%28Ci.nsIWindowMediator%29.%0A%20%20%20%20%20%20%20%20%20%20%20getMostRecentWindow%28%22navigator%3Abrowser%22%29%0A%20%20%7D%0A%7D%0A%0Afunction%20readFromClipboard%28%29%20%7B%0A%20%20var%20string%3B%0A%20%20try%20%7B%0A%20%20%20%20%20%20var%20clipboard%20%3D%20Cc%5B%22@mozilla.org/widget/clipboard%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20getService%28Ci.nsIClipboard%29%3B%0A%20%20%20%20%20%20var%20trans%20%3D%20Cc%5B%22@mozilla.org/widget/transferable%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%28Ci.nsITransferable%29%3B%0A%20%20%20%20%20%20trans.addDataFlavor%28%22text/unicode%22%29%3B%0A%20%20%20%20%20%20if%20%28clipboard.supportsSelectionClipboard%28%29%29%20%7B%0A%20%20%20%20%20%20%20%20clipboard.getData%28trans%2C%20clipboard.kSelectionClipboard%29%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20clipboard.getData%28trans%2C%20clipboard.kGlobalClipboard%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20var%20data%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20var%20dataLen%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20trans.getTransferData%28%22text/unicode%22%2C%20data%2C%20dataLen%29%3B%0A%20%20%20%20%20%20if%20%28data%29%20%7B%0A%20%20%20%20%20%20%20%20data%20%3D%20data.value.QueryInterface%28Ci.nsISupportsString%29%3B%0A%20%20%20%20%20%20%20%20string%20%3D%20trans.getTransferData.length%20%3D%3D%202%0A%20%20%20%20%20%20%20%20%20%20%3F%20data.data%20%3A%20data.data.substring%280%2C%20dataLen.value%20/%202%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%7D%20catch%20%28ex%29%20%7B%0A%20%20%7D%0A%20%20return%20string%3B%0A%7D%0A%0Afunction%20loadFromClipboard%28%29%20%7B%0A%20%20var%20string%20%3D%20readFromClipboard%28%29%3B%0A%20%20if%20%28gTextbox.value%20%21%3D%20string%29%20%7B%0A%20%20%20%20if%20%28%21string%29%20%7B%0A%20%20%20%20%20%20gTextbox.value%20%3D%20%22%22%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20gTextbox.value%20%3D%20string%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20gTextbox.selectionStart%20%3D%200%3B%0A%20%20gTextbox.selectionEnd%20%3D%200%3B%0A%7D%0A%0Afunction%20copyToClipboard%28aString%29%20%7B%0A%20%20let%20clipboardHelper%20%3D%20Cc%5B%22@mozilla.org/widget/clipboardhelper%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20getService%28Ci.nsIClipboardHelper%29%3B%0A%20%20clipboardHelper.copyString%28aString%29%3B%0A%7D%0A%0Afunction%20clearClipboard%28%29%20%7B%0A%20%20copyToClipboard%28%22%22%29%3B%0A%20%20gTextbox.value%20%3D%20%22%22%3B%0A%7D%0A%0Afunction%20edit%28%29%20%7B%0A%20%20edittarget%28gTextbox%29%3B%0A%7D%0A%0Afunction%20closeDialog%28%29%20%7B%0A%20%20getMainwin%28%29.gCBClipboardViewer.opened%20%3D%20false%3B%0A%20%20if%20%28window.frameElement%29%20%7B%0A%20%20%20%20switch%20%28window.frameElement.id%29%20%7B%0A%20%20%20%20case%20%22sidebar%22%3A%0A%20%20%20%20%20%20getMainwin%28%29.gCBClipboardViewer.toggleSidebar%28%29%3B%0A%20%20%20%20%20%20break%3B%0A%20%20%20%20default%3A%0A%20%20%20%20%20%20getMainwin%28%29.gCBClipboardViewer.togglePanel%28%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%20else%20%7B%0A%20%20%20%20window.close%28%29%3B%0A%20%20%7D%0A%7D%0A%0Afunction%20popupShowing%28aEvent%29%20%7B%0A%20%20var%20children%20%3D%20aEvent.target.childNodes%3B%0A%20%20for%20%28var%20i%20%3D%200%3B%20i%20%26lt%3B%20children.length%3B%20i++%29%20%7B%0A%20%20%20%20var%20command%20%3D%20children%5Bi%5D.getAttribute%28%22cmd%22%29%3B%0A%20%20%20%20if%20%28command%29%20%7B%0A%20%20%20%20%20%20var%20controller%20%3D%20document.commandDispatcher%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getControllerForCommand%28command%29%3B%0A%20%20%20%20%20%20var%20enabled%20%3D%20controller.isCommandEnabled%28command%29%3B%0A%20%20%20%20%20%20if%20%28enabled%29%20%7B%0A%20%20%20%20%20%20%20%20children%5Bi%5D.removeAttribute%28%22disabled%22%29%3B%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20children%5Bi%5D.setAttribute%28%22disabled%22%2C%20%22true%22%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A%0A/////////////////////////////////////////////////////////////////////////////%0A//////////////////////////////%20External%20Editor%20//////////////////////////////%0A/////////////////////////////////////////////////////////////////////////////%0A%0Avar%20_tmpdir%3Dnull%2C_dir_separator%2C_os%3B%0Avar%20_ext%2C_encode%2C_target%3D%5B%5D%3B%0A%0Afunction%20editinit%28%29%20%7B%0A%20%20if%20%28window.navigator.platform.toLowerCase%28%29.indexOf%28%22win%22%29%20%21%3D%20-1%29%20%7B%0A%20%20%20%20//%20Windows%20OS%0A%20%20%20%20_dir_separator%20%3D%20%22%5C%5C%22%3B%0A%20%20%20%20_os%20%3D%20%22win%22%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20//%20UNIX/Linux%20OS%0A%20%20%20%20_dir_separator%20%3D%20%22/%22%3B%0A%20%20%20%20_os%20%3D%20%22unix%22%3B%0A%20%20%7D%0A%0A%20%20_ext%20%3D%20%22txt%22%3B%0A%20%20_encode%20%3D%20%22UTF-8%22%3B%0A%20%20_target%20%3D%20%5B%5D%3B%0A%0A%20%20window.addEventListener%28%22unload%22%2C%20edituninit%2C%20false%29%3B%0A%20%20window.addEventListener%28%22unload%22%2C%20function%28%29%20%7B%0A%20%20%20%20document.removeEventListener%28%22focus%22%2C%20checkfocus_window%2C%20true%29%3B%0A%20%20%7D%2C%20false%29%3B%0A%7D%0A%0Afunction%20getEditor%28%29%20%7B%0A%20%20let%20pref%20%3D%20Cc%5B%22@mozilla.org/preferences-service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20getService%28Ci.nsIPrefService%29.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20getBranch%28%22custombuttons.ClipboardViewer.%22%29%3B%0A%20%20let%20editor%20%3D%20null%3B%0A%20%20try%20%7B%0A%20%20%20%20editor%20%3D%20pref.getCharPref%28%22external_editor%22%29%3B%0A%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20let%20prompts%20%3D%20Cc%5B%22@mozilla.org/embedcomp/prompt-service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20getService%28Ci.nsIPromptService%29%3B%0A%0A%20%20%20%20let%20ask%20%3D%20prompts.confirm%28null%2C%20%22Clipboard%20Viewer%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%u0412%u044B%20%u0434%u043E%u043B%u0436%u043D%u044B%20%u0441%u043D%u0430%u0447%u0430%u043B%u0430%20%u0432%u044B%u0431%u0440%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%u043E%u0432%u044B%u0439%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440.%5Cn%u041D%u0430%u0436%u043C%u0438%u0442%u0435%20OK%20%u0434%u043B%u044F%20%u043F%u0440%u043E%u0434%u043E%u043B%u0436%u0435%u043D%u0438%u044F.%22%29%3B%0A%20%20%20%20if%20%28%21ask%29%20return%20false%3B%0A%0A%20%20%20%20let%20nsIFilePicker%20%3D%20Ci.nsIFilePicker%3B%0A%20%20%20%20let%20filePicker%20%3D%20Cc%5B%22@mozilla.org/filepicker%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%28nsIFilePicker%29%3B%0A%20%20%20%20filePicker.init%28window%2C%20%22Select%20editor%22%2C%20nsIFilePicker.modeOpen%29%3B%0A%20%20%20%20filePicker.appendFilters%28nsIFilePicker.filterApplication%29%3B%0A%20%20%20%20filePicker.appendFilters%28nsIFilePicker.filterAll%29%3B%0A%20%20%20%20filePicker.open%28res%20%3D%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28res%20%3D%3D%20nsIFilePicker.returnOK%29%20%0A%20%20%20%20%20%20if%20%28filePicker.file.exists%28%29%20%26amp%3B%26amp%3B%20filePicker.file.isExecutable%28%29%29%20%7B%0A%20%20%20%20%20%20%20%20pref.setCharPref%28%22external_editor%22%2C%20filePicker.file.path%29%3B%0A%20%20%20%20%20%20%20%20editor%20%3D%20filePicker.file.path%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%7D%0A%20%20return%20editor%3B%0A%7D%0A%0Afunction%20edituninit%28%29%20%7B%0A%20%20if%20%28_tmpdir%20%3D%3D%20null%29%20return%3B%0A%20%20var%20windowType%20%3D%20%22navigator%3Abrowser%22%3B%0A%20%20var%20windowManager%20%3D%20Cc%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20getService%28%29%3B%0A%20%20var%20windowManagerInterface%20%3D%20windowManager.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20QueryInterface%28Ci.nsIWindowMediator%29%3B%0A%20%20var%20enumerator%20%3D%20windowManagerInterface.getEnumerator%28windowType%29%3B%0A%20%20if%20%28enumerator.hasMoreElements%28%29%29%20%7B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%0A%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%28Ci.nsIFile%29%3B%0A%20%20file.initWithPath%28_tmpdir%29%3B%0A%20%20var%20entries%20%3D%20file.directoryEntries%3B%0A%20%20while%20%28entries.hasMoreElements%28%29%29%20%7B%0A%20%20%20%20var%20entry%20%3D%20entries.getNext%28%29.QueryInterface%28Ci.nsIFile%29%3B%0A%20%20%20%20if%20%28/%5Ecustombuttons%5C./i.test%28entry.leafName%29%29%20%7B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20entry.remove%28false%29%3B%0A%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20try%20%7B%0A%20%20%20%20if%20%28file.exists%28%29%20%3D%3D%20true%20%29%20%7B%0A%20%20%20%20%20%20file.remove%28false%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%20catch%28e%29%20%7B%0A%20%20%7D%0A%0A%20%20_tmpdir%20%3D%20null%3B%0A%7D%0A%0Afunction%20gmon_edit_mouseclick%28e%29%20%7B%0A%20%20if%20%28e.button%20%21%3D%201%29%20return%3B%0A%20%20var%20target%20%3D%20e.target%3B%0A%20%20edittarget%28target%29%3B%0A%7D%0A%0Afunction%20checkfocus_window%28%29%20%7B%0A%20%20var%20target%2C%20filename%2C%20timestamp%2C%20encode%2C%0A%20%20%20%20%20%20file%2C%20inst%2C%20sstream%2C%20utf%2C%20textBoxText%3B%0A%0A%20%20if%20%28_target.length%26lt%3B%3D0%29%20return%3B%0A%0A%20%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsIFile%29%3B%0A%20%20istr%20%3D%20Cc%5B%22@mozilla.org/network/file-input-stream%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20createInstance%28Ci.nsIFileInputStream%29%3B%0A%0A%20%20//%20FileInputStream%27s%20read%20is%20%5Bnoscript%5D.%0A%20%20sstream%20%3D%20Cc%5B%22@mozilla.org/scriptableinputstream%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20createInstance%28Ci.nsIScriptableInputStream%29%3B%0A%20%20utf%20%3D%20Cc%5B%22@mozilla.org/intl/utf8converterservice%3B1%22%5D.%0A%20%20%20%20%20%20%20%20createInstance%28Ci.nsIUTF8ConverterService%29%3B%0A%0A%20%20for%20%28var%20i%3D0%3B%20i%20%26lt%3B%20_target.length%3Bi++%29%20%7B%0A%20%20%20%20target%20%3D%20_target%5Bi%5D%3B%0A%20%20%20%20if%20%28%21target.hasAttribute%28%22filename%22%29%29%20continue%3B%0A%20%20%20%20filename%20%3D%20target.getAttribute%28%22filename%22%29%3B%0A%20%20%20%20timestamp%20%3D%20target.getAttribute%28%22timestamp%22%29%3B%0A%20%20%20%20file.initWithPath%28filename%29%3B%0A%20%20%20%20if%20%28%21file.exists%28%29%20%7C%7C%20%21file.isReadable%28%29%29%20continue%3B%0A%20%20%20%20if%20%28file.lastModifiedTime%20%26lt%3B%3D%20timestamp%29%20continue%3B%0A%0A%20%20%20%20target.setAttribute%28%22timestamp%22%2C%20file.lastModifiedTime%29%3B%0A%0A%20%20%20%20istr.init%28file%2C%201%2C%200x400%2C%20false%29%3B%0A%20%20%20%20sstream.init%28istr%29%3B%0A%0A%20%20%20%20textBoxText%20%20%3D%20sstream.read%28sstream.available%28%29%29%3B%0A%20%20%20%20encode%20%3D%20target.getAttribute%28%22encode%22%29%3B%0A%20%20%20%20if%20%28textBoxText.length%29%20%7B%0A%20%20%20%20%20%20copyToClipboard%28utf.convertStringToUTF8%28textBoxText%2C%20encode%2C%20true%2C%20false%29%29%3B%0A%20%20%20%20%20%20target.value%20%3D%20utf.convertStringToUTF8%28textBoxText%2C%20encode%2C%20true%2C%20false%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20clearClipboard%28%29%3B%0A%20%20%20%20%20%20target.value%20%3D%20%22%22%3B%0A%20%20%20%20%7D%0A%20%20%20%20sstream.close%28%29%3B%0A%20%20%20%20istr.close%28%29%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20file.remove%28false%29%3B%0A%20%20%20%20%7D%20catch%28e%29%20%7B%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A%0Afunction%20editfile%28target%2Cfilename%29%20%7B%0A%20%20//%20Figure%20out%20what%20editor%20to%20use.%0A%20%20var%20editor%20%3D%20getEditor%28%29%3B%0A%20//%20var%20editor%20%3D%20%22C%3A%5C%5CAkelPad%5C%5CAkelPad.exe%22%3B%0A%20%20if%20%28%21editor%29%20return%20false%3B%0A%0A%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsIFile%29%3B%0A%20%20file.initWithPath%28editor%29%3B%0A%20%20if%20%28%21file.exists%28%29%29%20%7B%0A%20%20%20%20alert%28%22Error_invalid_Editor_file%22%29%3B%0A%20%20%20%20return%20false%3B%0A%20%20%7D%0A%20%20if%20%28%21file.isExecutable%28%29%29%20%7B%0A%20%20%20%20alert%28%22Error_Editor_not_executable%22%29%3B%0A%20%20%20%20return%20false%3B%0A%20%20%7D%0A%20%20target.setAttribute%28%22filename%22%2C%20filename%29%3B%0A%20%20target.setAttribute%28%22timestamp%22%2C%20file.lastModifiedTime%29%3B%0A%0A%20%20//%20Run%20the%20editor.%0A%20%20var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%28Ci.nsIProcess%29%3B%0A%20%20process.init%28file%29%3B%0A%20%20var%20args%20%3D%20%5Bfilename%5D%3B%0A%20%20process.run%28false%2C%20args%2C%20args.length%29%3B%20%20//%20don%27t%20block%0A%20%20document.addEventListener%28%22focus%22%2C%20checkfocus_window%2C%20true%29%3B%0A%20%20return%20true%3B%0A%7D%0A%0Afunction%20edittarget%28target%29%20%7B%0A%20%20var%20textBoxText%20%3D%20target.value%3B%0A%20%20//%20Get%20filename.%0A%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsIFile%29%3B%0A%20%20if%20%28target.hasAttribute%28%22filename%22%29%29%20%7B%0A%20%20%20%20var%20filename%20%3D%20target.getAttribute%28%22filename%22%29%3B%0A%20%20%20%20file.initWithPath%28filename%29%3B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20if%28file.exists%28%29%29%20file.remove%28false%29%3B%0A%20%20%20%20%7D%20catch%28e%29%20%7B%0A%20%20%20%20%7D%0A%20%20%7D%20else%20%7B%0A%20%20%20%20var%20filename%20%3D%20TmpFilenameTextarea%28%29%3B%0A%20%20%7D%0A%20%20file.initWithPath%28filename%29%3B%20%20%20%20%0A%20%20file.create%28file.NORMAL_FILE_TYPE%2C%200x180%29%3B%0A%0A%20%20//%20Write%20the%20data%20to%20the%20file.%0A%20%20var%20ostr%20%3D%20Cc%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%28Ci.nsIFileOutputStream%29%3B%0A%20%20ostr.init%28file%2C%202%2C%200x200%2C%20false%29%3B%0A%0A%20%20if%28navigator.platform%20%3D%3D%20%22Win32%22%29%20%7B%0A%20%20%20%20//%20Convert%20Unix%20newlines%20to%20standard%20network%20newlines%0A%20%20%20%20textBoxText%20%3D%20textBoxText.replace%28/%5Cn/g%2C%20%22%5Cr%5Cn%22%29%3B%0A%20%20%7D%0A%20%20var%20conv%20%3D%20Components.classes%5B%27@mozilla.org/intl/scriptableunicodeconverter%27%5D.createInstance%28Components.interfaces.nsIScriptableUnicodeConverter%29%3B%0A%20%20try%20%7B%0A%20%20%20%20%20%20%20%20conv.charset%20%3D%20%27utf-8%27%3B%0A%09textBoxText%20%3D%20conv.ConvertFromUnicode%28textBoxText%29%3B%0A%20%20%20%20%0A%20%20%7D%20catch%28e%29%20%7B%0A%20%20%20%20textBoxText%20%3D%20%22%22%3B%0A%20%20%7D%0A%20%20ostr.write%28textBoxText%2C%20textBoxText.length%29%3B%0A%0A%20%20ostr.flush%28%29%3B%0A%20%20ostr.close%28%29%3B%0A%0A%20%20//%20setup%20target%20info%0A%20%20target.setAttribute%28%22encode%22%2C%20_encode%29%3B%0A%0A%20%20//%20Edit%20the%20file.%0A%20%20if%20%28editfile%28target%2Cfile.path%29%29%20%7B%0A%20%20%20%20_target.push%28target%29%3B%20%20//%20Editting%20target%20array%0A%20%20%7D%0A%7D%0A%0A//Compose%20temporary%20filename%20out%20of%0A//%20%20%20%20-%20tmpdir%20setting%0A//%20%20%20%20-%20document%20url%0A//%20%20%20%20-%20textarea%20name%0A//%20%20%20%20-%20ext%20suffix%0Afunction%20TmpFilenameTextarea%28%29%20%7B%0A%20%20var%20TmpFilename%3B%0A%20%20_tmpdir%20%3D%20gettmpDir%28%29%3B%0A%20%20do%20%7B%0A%20%20%20%20TmpFilename%20%3D%20_tmpdir%20+%20_dir_separator%20+%20%22clipboard.%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Math.floor%28Math.random%28%29%20*%20100000%29%20+%20%22.%22%20+%20_ext%3B%0A%20%20%7D%20while%20%28%21ExistsFile%28TmpFilename%29%29%0A%20%20%20%20return%20TmpFilename%3B%0A%7D%0A%0A//Function%20returns%20true%20if%20given%20filename%20exists%0Afunction%20ExistsFile%28filename%29%20%7B%0A%20%20try%20%7B%0A%20%20%20%20var%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%28Ci.nsIFile%29%3B%0A%20%20%20%20file.initWithPath%28filename%29%3B%0A%20%20%20%20return%20true%3B%0A%20%20%7D%20catch%28e%29%20%7B%0A%20%20%20%20return%20false%3B%0A%20%20%7D%0A%7D%0A%0A/**%0A*%20Returns%20the%20directory%20where%20we%20put%20files%20to%20edit.%0A*%20@returns%20nsILocalFile%20The%20location%20where%20we%20should%20write%20editable%20files.%0A*/%0Afunction%20gettmpDir%28%29%20%7B%0A%20%20/*%20Where%20is%20the%20directory%20that%20we%20use.%20*/%0A%20%20var%20fobj%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20getService%28Ci.nsIProperties%29.get%28%22TmpD%22%2C%20Ci.nsIFile%29%3B%0A%20%20fobj.append%28%22Clipboard_Viewer%22%29%3B%0A%20%20if%20%28%21fobj.exists%28%29%29%20%7B%0A%20%20%20%20fobj.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%20parseInt%28%220700%22%2C%208%29%29%3B%0A%20%20%7D%0A%20%20if%20%28%21fobj.isDirectory%28%29%29%20%7B%0A%20%20%20%20alert%28%22Having%20a%20problem%20finding%20or%20creating%20directory%3A%20%22+%20fobj.path%29%3B%0A%20%20%7D%0A%20%20return%20fobj.path%3B%0A%7D%0A%0A//////////////////////////////////////////////%0A%0Afunction%20onLoad%28%29%20%7B%0A%20%20getMainwin%28%29.gCBClipboardViewer.opened%20%3D%20true%3B%0A%20%20editinit%28%29%3B%0A%7D%0A%0Awindow.addEventListener%28%22load%22%2C%20onLoad%2C%20false%29%3B%0Awindow.removeEventListener%28%22unload%22%2C%20onLoad%2C%20false%29%3B%0A%0A%20%20%5D%5D%26gt%3B%26lt%3B/script%26gt%3B%0A%0A%26lt%3B/dialog%26gt%3B%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано Andrey_Krropotkin (09-02-2019 19:15:04)
Отсутствует
Уважаемые форумчане и спецы! Долгое время пользовался отличным расширением lazarus.
Но недавно вынужден был все таки, перейти на FF 54 и lazarus перестал работать. Хороших аналогов на замену нет.
Может кто сподобиться написать кнопку с максимально близким функционалом?
Думаю не только я был бы признателен вам за это.
Отсутствует
Dumby
Не в курсе, что опять натворили в 63-65 ? Пустая страница сохраняется в сессии ...Выход с закрытыми вкладками, а сессия сохранилась с пустотой...
Отредактировано drage2 (11-02-2019 13:36:27)
Отсутствует
drage2 у меня есть очень старая кнопка - ручная работа с сессиями, устанавливается в главное меню (AppMenu), посмотри повторяется этот глюк или нет.
// Добавить восстановление сессии в Appmenu .... (function () { var overwrite = 1, //Если восстановление сессии устанавливается для покрытия открытых страниц, 0 при отсутствии покрытия, чтобы покрыть 2 охвата и восстановления сессию в новом окне Cc = Components.classes, Ci = Components.interfaces, Cu = Components.utils; //SS = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); var SS = "nsISessionStore" in Components.interfaces ? ( Components.classes["@mozilla.org/browser/sessionstore;1"] || Components.classes["@mozilla.org/suite/sessionstore;1"] ).getService(Components.interfaces.nsISessionStore) : SessionStore; if (!window.Services) { Cu.import("resource://gre/modules/Services.jsm"); } //Сохранить функцию чтения файла, взятые из Griever из UserScriptLoader.uc.js function saveFile(data) { var file = Services.dirsvc.get('UChrm', Ci.nsIFile); file.append("simple_session_manager.json"); var suConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); suConverter.charset = 'UTF-8'; data = suConverter.ConvertFromUnicode(data); var foStream = Cc['@mozilla.org/network/file-output-stream;1'].createInstance(Ci.nsIFileOutputStream); foStream.init(file, 0x02 | 0x08 | 0x20, 0x1B4, 0); foStream.write(data, data.length); foStream.close(); } function loadFile() { var file = Services.dirsvc.get('UChrm', Ci.nsIFile); file.append("simple_session_manager.json"); if (file.exists() === false) return false; var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); var sstream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream); fstream.init(file, -1, 0, 0); sstream.init(fstream); var data = sstream.read(sstream.available()); try { data = decodeURIComponent(escape(data)); } catch (e) {} sstream.close(); fstream.close(); if (data === "undefined") return false; data = JSON.parse(data); return data; } //Получить текущее время function getTime() { var d = new Date(); function addzero(t) { (t < 10) ? t = "0" + t : t; return t; } var t = addzero(d.getDate()) + "." + addzero(d.getMonth()+1) + "." + d.getFullYear() + "-" + addzero(d.getHours()) + ":" + addzero(d.getMinutes()); return t; } //Сохранить сессию function saveSession(ssdata) { var name = prompt("Сохранить",getTime()); if (name != null) { if (loadFile() === false) { var data = {}; } else { var data = loadFile(); } if (data[name]) { alert("Сессия с тем же именем уже существует") return; } data[name] = JSON.parse(ssdata); saveFile(JSON.stringify(data)); makeitems(name); } } //Сохранить все окна сессии function saveCurrentSession() { var ssdata = SS.getBrowserState(); saveSession(ssdata); } //Сохранение текущей сессии окне function saveCurrentWindowSession() { var ssdata = SS.getWindowState(window); saveSession(ssdata); } //Удаление сессии function remove() { var node = this.parentNode.parentNode; var name = node.getAttribute("label"); var cf = confirm("Вы уверены, что хотите удалить " + name + " ?"); if (cf === true) { node.style.display = "none"; var data = loadFile(); delete data[name]; saveFile(JSON.stringify(data)); } } //Переименовать function rename() { var node = this.parentNode.parentNode; var name = node.getAttribute("label"); var newname = prompt("Переименовать " + name + " in", null); if (!newname) return; this.parentNode.parentNode.setAttribute("label", newname); var data = loadFile(); var value = data[name]; data[newname] = value; delete data[name]; saveFile(JSON.stringify(data)); } //Восстановление сессий function restoreSession(stateString) { if (typeof stateString === "string") { var state = stateString; } else { var name = this.parentNode.parentNode.getAttribute("label"); var data = loadFile(); var state = JSON.stringify(data[name]); } switch (overwrite) { case 0: SS.setWindowState(window, state, false); break; case 1: SS.setBrowserState(state); break; case 2: var watcher = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(Ci.nsIWindowWatcher); var argstring = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString); var w = watcher.openWindow(null, "chrome://browser/content/browser.xul", "name", "chrome,all,dialog=no", argstring); w.addEventListener("load", function () { SS.setWindowState(w, state, true); }, true); break; } } function restoreSessionSelectively() { var name = this.parentNode.parentNode.getAttribute("label"); var data = loadFile(); var sessionValue = JSON.stringify(data[name]); var newTab = gBrowser.addTab("about:sessionrestore"); var newTabBrowser = gBrowser.getBrowserForTab(newTab); newTabBrowser.addEventListener("load", function () { var cDoc = newTabBrowser.contentDocument; var sessionData = cDoc.getElementById("sessionData"); sessionData.value = sessionValue; cDoc.getElementById("errorTitleText").innerHTML = "Выборочное восстановление"; cDoc.getElementById("errorShortDescText").hidden = true; cDoc.getElementById("errorLongDesc").innerHTML = "Вы собираетесь восстановить " + name + " . Вы можете отключить ненужные окна или вкладки"; var stateStringContainer = cDoc.createElement("div"); stateStringContainer.id = "stateStringContainer"; stateStringContainer.style.display = "none"; cDoc.getElementById("errorPageContainer").appendChild(stateStringContainer); var script = cDoc.createElement("script"); script.innerHTML = 'function restoreTwo() {\ document.getElementById("errorTryAgain").disabled = true;\ var ix = gStateObject.windows.length - 1;\ for (var t = gTreeData.length - 1; t >= 0; t--) {\ if (treeView.isContainer(t)) {\ if (gTreeData[t].checked === 0)\ gStateObject.windows[ix].tabs = gStateObject.windows[ix].tabs.filter(function (aTabData, aIx)\ gTreeData[t].tabs[aIx].checked);\ else if (!gTreeData[t].checked)\ gStateObject.windows.splice(ix, 1);\ ix--;\ }\ }\ var stateString = JSON.stringify(gStateObject);\ document.getElementById("stateStringContainer").setAttribute("stateString", encodeURIComponent(stateString));\ }'; stateStringContainer.addEventListener("DOMAttrModified", function () { this.removeEventListener('DOMAttrModified', arguments.callee, false); var stateString = decodeURIComponent(stateStringContainer.getAttribute("stateString")); gBrowser.removeCurrentTab(); restoreSession(stateString); }, false); cDoc.head.appendChild(script); var restoreBtn = cDoc.getElementById("errorTryAgain"); restoreBtn.setAttribute("oncommand", "restoreTwo();"); }, true); gBrowser.selectedTab = newTab; } //Создание меню для пункта сохраненного сеанса function makeitems(name) { var ss = document.createElement("menu"); ss.setAttribute("label", name); ss.setAttribute("class", "savedSessions"); menuItem2.insertBefore(ss, null); var ss_popup = document.createElement("menupopup"); var rs = document.createElement("toolbarbutton"); rs.setAttribute("label", "Восстановление"); rs.addEventListener("command", restoreSession, false); var rss = document.createElement("toolbarbutton"); rss.setAttribute("label", "Выборочное восстановление"); rss.addEventListener("command", restoreSessionSelectively, false) var rn = document.createElement("toolbarbutton"); rn.setAttribute("label", "Переименовать"); rn.addEventListener("command", rename, false); var rm = document.createElement("toolbarbutton"); rm.setAttribute("label", "Удалить"); rm.addEventListener("command", remove, false); ss_popup.appendChild(rs); ss_popup.appendChild(rss); ss_popup.appendChild(rn); ss_popup.appendChild(rm); ss.appendChild(ss_popup); //menupopup.appendChild(ss); } //Создание меню в appmenu var menuItem2 = document.createElement("panelview"); menuItem2.setAttribute("id", "appMenu-Seans"); menuItem2.setAttribute("title", "Сеанс"); menuItem2.setAttribute("class", "PanelUI-subView"); var it1 = document.getElementById("PanelUI-bookmarkingTools"); it1.parentNode.insertBefore(menuItem2, it1); var menu = document.createElement("toolbarbutton"); //Главное меню menu.id = "ssm_menu"; var it = document.getElementById("appMenuRestoreLastSession"); menu.setAttribute("label", "Сохранить сессию"); //Всплывающие меню menu.setAttribute("class", "subviewbutton subviewbutton-nav"); menu.setAttribute("closemenu", "none"); menu.setAttribute("oncommand", "PanelUI.showSubView('appMenu-Seans', this)"); it.parentNode.insertBefore(menu, it); addDestructor(()=> menuItem2.remove()); var scs = document.createElement("toolbarbutton"); //Сохранение текущей сессии scs.setAttribute("label", "Сохранить сеанс"); scs.setAttribute("class", "subviewbutton"); scs.addEventListener("command", saveCurrentSession, false); menuItem2.insertBefore(scs, null); var scws = document.createElement("toolbarbutton"); //Сохранение текущей сессии окне scws.setAttribute("label", "Сохранить в новом окне"); scws.setAttribute("class", "subviewbutton"); scws.addEventListener("command", saveCurrentWindowSession, false); menuItem2.insertBefore(scws, null); var menusep = document.createElement("toolbarseparator"); //Меню сепаратор menuItem2.insertBefore(menusep, null); var savedSessions = loadFile(); //Сохраненный список for (name in savedSessions) { makeitems(name); } }());
Отредактировано Andrey_Krropotkin (16-02-2019 20:43:23)
Отсутствует
Andrey_Krropotkin
А у вас нет случайно работающей кнопки about:config
// Настройка функций кликов мыши(Mouse Click settings) ....................................................... this.onclick = function(e) { if ( e.button == 0 ) getBrowser (). selectedTab = getBrowser (). addTab ("about:config"); if ( e.button == 1 ) { // запомнить текст из буфера обмена и скопировать текст на странице .... var clip = gClipboard.read(); window.content.focus(); goDoCommand("cmd_copy"); gBrowser.selectedTab = gBrowser.addTab( 'about:config' ); // oбработчик ждет пока откроется "about:config", вставит текст из буфера обмена и удаляет себя .... gBrowser.addEventListener("pageshow", function(e) { this.removeEventListener("pageshow", arguments.callee, true); content.document.getElementById("textbox").value = gClipboard.read(); content.document.getElementById("textbox").doCommand(); if ( clip ) gClipboard.write( clip ); // вернуть текст в буфер обмена }, true); } }; // Создать меню .............................................................................................. this.ss = [ { label:"Все about:", value: 'about:about'}, { label:"О плагинах", value: 'about:plugins'}, { label:"Новая вкладка", value: 'about:newtab'}, { label:"Настройки как таб", value: 'about:preferences'}, { label:"Информация о кэше", value: 'about:cache'}, { label:"Восстановление сессии", value: 'about:sessionrestore'}, { label:"Управление разрешениями", value: 'about:permissions'}, { label:"Информация для решения проблем", value: 'about:support'}, { label:"Показать исплъзование памяти подробно", value: 'about:memory'} ]; this.mObj = custombuttons.getCbContextObj(this); this.init = function(x) { x.mObj.setSub(); var nItem = {}, mItem = {}; document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()"); for ( var i in x.ss ) { nItem = new x.mObj.getItem(); nItem.label = x.ss[i].label; if ( nItem.label == "separator" ) var nItem = document.createElement("menuseparator"); var mItem = x.mObj.insertBefore(nItem, x.mObj.oMenu.lastChild); mItem.setAttribute('onclick', 'getBrowser().selectedTab = getBrowser().addTab("' + x.ss[i].value + '")'); }; x.mObj.getItem(); nItem = x.mObj.getItem(); this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild); }; this.init(this); // Подсказка кнопки ............................................................................................ this.tooltipText = "Л: Открыть 'about:config'\nС: Открыть 'about:config' с настройкой ( выделенной или из буфера )\nП: Показать все about:";
Отсутствует
Garalf это уже раньше обсуждалось. https://forum.mozilla-russia.org/viewto … 86#p761786
Замени везде addTab на addTrustedTab
В нижней панели - пример
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u043D%u0438%u0436%u043D%u0435%u0439%20%u043F%u0430%u043D%u0435%u043B%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABxUlEQVR4XqWRP2oVURSHvztzXyZg/ENiZ2NjOsUtCHYuQndh4QIs3YCbsLBRwQUIgpViIQQFQdTE5M2bNzPnj+cy7zGFgRT+4OM7d5hzONybbj89enVwrbkngzO0wtBpEF7N9bgOr5SxG5HesF5wWePd0dt0//nP9d3D/ebkBJan0LZwVhwsC2ewCrpgHWdrAQcMaF/2eX83jbf2aE6BdRNcDq5Ctw534dXGhRaGHsyhwvn8IY/58MB5dAfcAcK2MYDPtRmoGmqKidMs4OGTilwDi4o5NefG3RFxzILsNDXkysmYclFKk4iFDdVpSAWohvWCfndH1cIW3g5RrOBGFjF+LwcS6fy1tWBTg3kxGl7UMIqSv/5oefbiGHX+SUrz0Lmciku7Fcetkm9c3+Xxg5uMNk9wKxjmHiZsQVgddwvgyo7x7s1Hcq5gr6mYA5ijmhDV0oSaIhIm8Onb2AcG2efdcWd704EhYrgXl/OMmYNPVME2mG1/sOLtC2ybwrZxYIYDuQ5Nceo6SAZiaA6JYmlaXcxY4NMTVrCTy0sk8uv3v+Tb9z/Sr0ZkEKQfkHEMK1o8FAQVAQdnSl0lPn05keTu/E/+ApLnoYXyGb2zAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u0411%u043B%u043E%u043A%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043F%u043E%u0432%u0442%u043E%u0440%u043D%u044B%u0439%20%u0437%u0430%u043F%u0443%u0441%u043A%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u0438%20%u043E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%u043E%u0432%20%u043F%u0440%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0438%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u043F%u0430%u043D%u0435%u043B%u0435%u0439%20........................%0A%0A%0Avar%20icon%20%3D%20document.getAnonymousElementByAttribute%28%20this%2C%20%27class%27%2C%20%27toolbarbutton-icon%27%29%3B%0Aicon.style.width%20%3D%20%2716px%27%2C%20icon.style.height%20%3D%20%2716px%27%3B%0A%0Athis.bottomPanel%20%3D%20function%28aURL%29%20%7B%0A%20%20var%20prefBranch%20%3D%20%22custombuttons.bottomPanel.%22%0A%0A%20%20if%28%21aURL%20%26%26%20aURL%20%21%3D%20%22%22%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20aURL%20%3D%20gPrefService.getCharPref%28prefBranch%20+%20%22url%22%29%3B%0A%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20aURL%20%3D%20%22%22%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20if%28aURL%20%3D%3D%20%22%22%29%20return%3B%0A%0A%20%20if%28aURL%20%3D%3D%20gURLBar.value%20%26%26%20%21aURL.match%28/%5E%5Cw+%3F%5C%3A/%29%29%20aURL%20%3D%20%22http%3A//%22%20+%20aURL%3B%0A%0A%20%20var%20panelID%20%3D%20%22bottom-panel%22%3B%0A%20%20var%20gPanel%20%3D%20document.getElementById%28panelID%29%3B%0A%20%20var%20height%3B%0A%20%20try%20%7B%0A%20%20%20%20height%20%3D%20gPrefService.getIntPref%28prefBranch%20+%20%22height%22%29%3B%0A%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20height%20%3D%20400%3B%0A%20%20%7D%0A%0A%20%20if%28gPanel%29%20%7B%0A%0A%20%20%20%20var%20src%20%3D%20gPanel.firstChild.nextSibling.getAttribute%28%22src%22%29%3B%0A%20%20%20%20if%28aURL%20%21%3D%20src%29%20%7B%0A%20%20%20%20%20%20gPanel.firstChild.nextSibling.setAttribute%28%22src%22%2C%20aURL%29%3B%0A%20%20%20%20%20%20//gPanel.firstChild.nextSibling.loadURI%28aURL%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20gPrefService.setIntPref%28prefBranch%20+%20%22height%22%2C%20gPanel.height%29%3B%0A%20%20%20%20%20%20gPanel.parentNode.removeChild%28gPanel.previousSibling%29%3B%0A%20%20%20%20%20%20gPanel.parentNode.removeChild%28gPanel%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%7D%20else%20%7B%0A%0A%20%20%20%20var%20appContent%20%3D%20document.getElementById%28%22appcontent%22%29%3B%0A%0A%20%20%20%20var%20spl%20%3D%20appContent.appendChild%28document.createElement%28%22splitter%22%29%29%3B%0A%20%20%20%20%20%20%20%20spl.setAttribute%28%22collapse%22%2C%20%22after%22%29%3B%0A%20%20%20%20%20%20%20%20spl.style.border%20%3D%20%22none%22%3B%0A%20%20%20%20%20%20%20%20spl.style.borderTop%20%3D%20%221px%20solid%20threedhighlight%22%3B%0A%20%20%20%20%20%20%20%20spl.setAttribute%28%22onclick%22%2C%20%22this.setAttribute%28%27state%27%2C%20%27%27%29%3B%22%29%3B%0A%0A%20%20%20%20var%20box%20%3D%20appContent.appendChild%28document.createElement%28%22hbox%22%29%29%3B%0A%20%20%20%20%20%20%20%20box.id%20%3D%20panelID%3B%0A%20%20%20%20%20%20%20%20box.height%20%3D%20height%3B%0A%20%20%20%20%20%20%20%20box.orient%20%3D%20%22vertical%22%3B%0A%0A%20%20%20%20var%20tbr%20%3D%20box.appendChild%28document.createElement%28%22toolbar%22%29%29%3B%0A%20%20%20%20%20%20%20%20tbr.setAttribute%28%22fullscreentoolbar%22%2C%20true%29%3B%0A%0A%20%20%20%20var%20spr%20%3D%20tbr.appendChild%28document.createElement%28%22spacer%22%29%29%3B%0A%20%20%20%20%20%20%20%20spr.setAttribute%28%22flex%22%2C%201%29%3B%0A%0A%20%20%20%20var%20btn%20%3D%20tbr.appendChild%28document.createElement%28%22toolbarbutton%22%29%29%3B%0A%20%20%20%20%20%20%20%20btn.style.listStyleImage%20%3D%20%22url%28chrome%3A//global/skin/icons/Minimize.gif%29%22%3B%0A%20%20%20%20%20%20%20%20btn.minimize%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20gPanel%20%3D%20document.getElementById%28%22bottom-panel%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20gPanel.previousSibling.setAttribute%28%22state%22%2C%20%22collapsed%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20btn.setAttribute%28%22oncommand%22%2C%20%22this.minimize%28%29%22%29%3B%0A%0A%20%20%20%20var%20btc%20%3D%20tbr.appendChild%28document.createElement%28%22toolbarbutton%22%29%29%3B%0A%20%20%20%20%20%20%20%20btc.className%20%3D%20%22tabs-closebutton%22%3B%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20btc.closePanel%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20gPanel%20%3D%20document.getElementById%28%22bottom-panel%22%29%3B%0A%20%20%20%20%20%20%20%20%20//%20gPrefService.setIntPref%28prefBranch%20+%20%22height%22%2C%20gPanel.height%29%3B%0A%20%20%20%20%20%20%20%20%20%20gPanel.parentNode.removeChild%28gPanel.previousSibling%29%3B%0A%20%20%20%20%20%20%20%20%20%20gPanel.parentNode.removeChild%28gPanel%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20btc.setAttribute%28%22id%22%2C%20%22closeBottomPanel%22%29%3B%0A%20%20%20%20%20%20%20%20btc.style.listStyleImage%20%3D%20%22url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACt0lEQVQ4jaWSzUtUYRTGn/fcGZ25H+m9Iyne8fpFq4lGCsFFIW21NiKKuHIn4qpazDraabnMTVEh+Af0B0QIIohBowhlkM1MMTre+VLngzv3PW1SKWvVWR0eOL/zcM4jmBn/U4G/iTuzsyK7unoLUl4HABDtdExNbV1fXr60Tfzp4J1h3Dd1/ak1OHhN7+kBiHCaTsPd2NgrlMsP7x4fv/0nYE3XH9ix2GLbzIwQmvYbmCsVHL16xd+3tx/dOTl5dqbTWfPeMIavOs6COT0tmBmyWAS1toJaWyGLRbCUMKemxFXHWXhvGMOXACrw2BwdJYUITX190MbG4O/twf/yBdrYGJr6+6EQwbx3j1QhHv8GWDfNNjUavR3u6ACyWQRjMQRsG+rkJNSJCQRsG8FYDDKbRbi9Harj3F43zbYLB41Gr2bbRIUCFACnS0vwMhkEbBsB24aXyaCcSEDJZiFyOWidnYRGo/f8jQpQp9NTiFwOACCJACEuDsgMeXAAuC7YMECeBwWonwOaLOtT/evXMhTlSs00oS8vI2jbqGcyADOau7pgvHiB8vg4tMND1F233GRZn87pzIwtXX9eiEb5uLubC2/ecC2V4qOhIT4aGuJqKsX516/52HG4EI3ylq4/P5s7z8FHy2qXnvehOxTqDBGhFongiusCAMqWhVA+j5qU+Far/RDB4M2BfP7gUpCSLS03qr7/NiyEExEC6i+9AsBlRpU5FVaU+zdKpeSlHCSTSazOzW0XNW2gCjzZ9/3Pu77Pu77P+77/uQo8cTVt4OXMzM7a2tpFlBOJhFhZWWkulUphz/NUKWWYmUPM3GwCKgBRAKoA6kRUI6JKIBCo6rpeGRkZqQlmRjqdxuLiIm1ublIul6NKpaI0Gg3yfV8AABFxMBiUoVBIRiIRPx6Py/n5eRmPx/ETBvM/dPD/rBwAAAAASUVORK5CYII%3D%29%22%3B%0A%20%20%20%20%20%20%20%20btc.setAttribute%28%22oncommand%22%2C%20%22this.closePanel%28%29%22%29%3B%0A%0A%20%20%20%20var%20ifr%20%3D%20box.appendChild%28document.createElement%28%22browser%22%29%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22type%22%2C%20%22content%22%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22flex%22%2C%201%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22src%22%2C%20aURL%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22tooltip%22%2C%20%22aHTMLTooltip%22%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22onclick%22%2C%20%22return%20contentAreaClick%28event%2C%20true%29%22%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22autocompletepopup%22%2C%20%22PopupAutoComplete%22%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22contextmenu%22%2C%20%22contentAreaContextMenu%22%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22contentcontextmenu%22%2C%20%22contentAreaContextMenu%22%29%3B%0A%20%20%7D%0A%0A%20%20gPrefService.setCharPref%28prefBranch%20+%20%22url%22%2C%20aURL%29%3B%0A%0A%7D%20%20%0A//------------------------------------%0A%0Afunction%20addMenuitem%28aLabel%2C%20aURL%2C%20aNode%2C%20aObjString%29%20%7B%0A%20%20var%20mItem%20%3D%20aNode.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20mItem.setAttribute%28%22label%22%2C%20aLabel%29%3B%0A%20%20mItem.setAttribute%28%22oncommand%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20aObjString%20+%20%22.bottomPanel%28%27%22%20+%20aURL%20+%20%22%27%29%3B%22%29%3B%0A%7D%0A%0A%0Afunction%20addSeparator%28aNode%2C%20aNum%29%20%7B%0A%20%20var%20separator%20%3D%20aNode.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%20%20separator.id%20%3D%20%22bottom-panel-button-separator%22%20+%20aNum%3B%0A%7D%0A%0Avar%20mPopup%20%3D%20document.createElement%28%22menupopup%22%29%3B%0AmPopup.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0AmPopup.setAttribute%28%22onpopupshowing%22%2C%20%22this.parentNode.popupShowing%28this%29%22%29%3B%0A%0A%0A%0AobjString%20%3D%20%22this.parentNode.parentNode%22%3B%0AaddMenuitem%28%22about%3Aabout%22%2C%20%22about%3Aabout%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22about%3Aconfig%22%2C%20%22about%3Aconfig%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22about%3Asupport%22%2C%20%22about%3Asupport%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22about%3Amemory%22%2C%20%22about%3Amemory%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22about%3Adebugging%22%2C%20%22about%3Adebugging%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22about%3Acache%22%2C%20%22about%3Acache%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22about%3Anetworking%22%2C%20%22about%3Anetworking%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22about%3Aperformance%22%2C%20%22about%3Aperformance%22%2C%20mPopup%2C%20objString%29%3B%0AaddSeparator%28mPopup%2C%200%29%3B%0AaddMenuitem%28%22%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%22%2C%20%22about%3Apreferences%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u0414%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%22%2C%20%22chrome%3A//mozapps/content/extensions/extensions.xul%3Ftype%3Dextensions%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u041C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u041F%u0430%u0440%u043E%u043B%u0435%u0439%22%2C%20%22chrome%3A//passwordmgr/content/passwordManager.xul%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22DOM%20Inspector%22%2C%20%22chrome%3A//inspector/content/inspector.xul%22%2C%20mPopup%2C%20objString%29%3B%0AaddSeparator%28mPopup%2C%200%29%3B%0AaddMenuitem%28%22%u0417%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%2C%20%22about%3Adownloads%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%u043C%u0438%22%2C%20%22chrome%3A//browser/content/places/places.xul%22%2C%20mPopup%2C%20objString%29%3B%0AaddSeparator%28mPopup%2C%200%29%3B%0AaddMenuitem%28%22%u0414%u043E%u043C%u0430%u0448%u043D%u044F%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%22%2C%20%22about%3Ahome%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u0422%u0435%u043A%u0443%u0449%u0430%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%22%2C%20%22%27%20+%20gBrowser.currentURI.spec%20+%20%27%22%2C%20mPopup%2C%20objString%29%3B%0A%0A%0A%0Athis.appendChild%28mPopup%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0A%0A%0Afunction%20handleKeydown%28e%29%20%7B%20%0A%20%20if%20%28%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.ctrlKey%20%26%26%20e.keyCode%20%3D%3D%2027%20%29%20%7B%0A%20%20%20%20%20%20%20if%20%28%20%21document.getElementById%28%27closeBottomPanel%27%29%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20document.getElementById%28%27closeBottomPanel%27%29.click%28%29%3B%0A%20%20%20%20%20%20%20%7D%3B%20%20%0A%7D%0Awindow.addEventListener%28%27keydown%27%2C%20handleKeydown%2C%20false%29%3B%0A%0A%0A%0A//%20%3D%3D%3D%3D%3D%20HIDE%20DROPMARKER%20IN%20BUTTON%20%3D%3D%3D%3D%3D%0A%0Avar%20that%20%3D%20this%3B%0Athis.hideDropMarker%20%3D%20function%28%29%20%7B%0A%20%20var%20dropMarker%20%3D%20document.getAnonymousElementByAttribute%28that%2C%20%22class%22%2C%20%22toolbarbutton-menu-dropmarker%22%29%3B%0A%20%20if%20%28dropMarker%29%20%7B%0A%20%20%20%20dropMarker.setAttribute%28%22hidden%22%2C%20%22true%22%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20setTimeout%28that.hideDropMarker%2C%2010%29%3B%0A%20%20%7D%0A%7D%0Athis.hideDropMarker%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.bottomPanel%28%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5Bnull%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано Andrey_Krropotkin (17-02-2019 17:31:48)
Отсутствует
Andrey_Krropotkin
Это теперь не глюк. Новая вкладка , это новая фича и всегда сохраняется в сессии. Сама кнопка работает параллельно.
Мне сессии вообще не нужны, лишние тормоза...
Отсутствует
Garalf не пользуюсь. Ее по моему Dumby делал. К нему обратитесь.
Отсутствует
Привет @bunda1!
Твоя замечательная кнопка переводчика теперь плохо работает в FF56
https://forum.mozilla-russia.org/viewto … 50#p486850
Переводит только всю страницу целиком по ЛКМ
Все остальные функции к сожалению не работают
Буду надеяться у тебя появится время, чтобы подправить.
Но у меня сохранилась другая твоя классная кнопка переводчика, которую ты сделал еще в 2012 году.
Она работает в связке с расширением Wiktionary and Google Translate 7.2.1
Единственная проблема: перестал переводиться выделенный текст на странице (правый клик по кнопке "заменить текст переводом")
при нажатии ПКМ по кнопке не срабатывает этот кусок кода
//правым кликом на кнопке... else if ( event.button ==2) { //отключать реакцию по умолчанию на правый клик event.preventDefault(); event.stopPropagation(); //Заменить текст переводом(google)
При ПКМ на кнопке появляется стандартное контекстное меню.
Вот сам код (инициализация) для кнопки Wiktionary and Google Translate 7.2.1
//присваиваем атрибуты var gButt = document.getElementById("gd12gtbutton"); gButt.setAttribute("onclick", "event.stopPropagation(); gButtClick(event);"); //подсказка для кнопки gButt.setAttribute("tooltiptext", "L = Перевести страницу / выделенный текст \nM = Перевести текст из буфера обмена \nR = Заменить текст переводом"); //Объявляем 'clipboard' ................................................................. var clipboard = Components.classes["@mozilla.org/widget/clipboardhelper;1"]. getService(Components.interfaces.nsIClipboardHelper); //обрабатывать клики на кнопке.............. gButtClick = function(event) { //левым кликом на кнопке if ( event.button ==0) { t = document. commandDispatcher. focusedWindow. getSelection (). toString (); if (t.length > 0) { //отключать реакцию по умолчанию на левый клик event.preventDefault(); event.stopPropagation(); //... var x = gBrowser.mCurrentTab._tPos +1; //Перевести текст в google gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab("http://translate.google.com/translate_t?hl=ru#auto|ru|"+t), x); } else { //Перевести страницу в google gd12.gdButton.clickHandler(); } } //средним кликом на кнопке.. else if ( event.button ==1) { //Перевести текст в google из буфера обмена var x = gBrowser.mCurrentTab._tPos +1; var t = readFromClipboard() gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab("http://translate.google.com/translate_t?hl=ru#auto|ru|"+t), x); } //правым кликом на кнопке... else if ( event.button ==2) { //отключать реакцию по умолчанию на правый клик event.preventDefault(); event.stopPropagation(); //Заменить текст переводом(google) var doc = getBrowser (). contentDocument; sel = doc. defaultView. getSelection (); sel = escape (convertFromUnicode ("UTF-8", sel)) var url='http://translate.google.ru/?q='+sel+"&hl=ru"+"&langpair=auto|ru&tbb=1" xmlhttp = new XMLHttpRequest() xmlhttp.open('GET',url, true); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState != 4) return if (xmlhttp.status == 200) { var div_ = doc. createElement ('div'); div_.innerHTML =xmlhttp.responseText var TBODY_= div_.getElementsByClassName ("almost_half_cell")[0] var TBODY_=TBODY_. getElementsByTagName ("span") [0].textContent; var range = content.getSelection().getRangeAt(0); var ht=range.cloneContents(); range.deleteContents(); ht.textContent=TBODY_ range.insertNode(ht); } } xmlhttp.send(null); } };
Помоги пожалуйста наладить ПКМ на твоей старой кнопке от 2012
Отредактировано leex (18-02-2019 19:30:32)
Отсутствует
Garalf
(obj => { this.onclick = obj.click.bind(obj); this.oncontextmenu = obj.contextmenu.bind(obj); this.tooltipText = "L: Reload userChrome.css\nM: CB Menu\nR: Reload userContent.css"; })({ async click(e) { if (e.button == 1) return gShowPopup(self); if (e.button || !this.chromeSheet) return; await this.reload(this.chromeSheet); this.restyle(0); }, async contextmenu(e) { if (e.ctrlKey || e.shiftKey || e.detail != 1 || !this.contentSheetURL) return; e.preventDefault(); var count = Services.ppmm.childCount, one = count == 1; var data = await this.reloadTab("chrome://extensions/content/dummy.xul", one ? false : {}); if (one) this.reloadTab(); else if (data) { var url = "data:," + encodeURIComponent( self.Help + this.contentSheetURL + '", ' + JSON.stringify(data) + ");" ); var types = ["web", "file", "extension"]; for(var ind = 0; ind < count; ind++) { var child = Services.ppmm.getChildAt(ind); types.includes(child.remoteType) && child.loadProcessScript(url, false); } } this.restyle(250); }, async reload(sheet, obj) { try {var style = await (await fetch(sheet.href)).text();} catch (ex) {return obj;} InspectorUtils.parseStyleSheet(sheet, style); if (obj) obj[sheet.href] = style; for(var ind = 0, len = sheet.cssRules.length; ind < len; ind++) { var rule = sheet.cssRules.item(ind); rule.type == rule.IMPORT_RULE && rule.styleSheet.href.startsWith("file:///") && await this.reload(rule.styleSheet, obj); } return obj; }, reloadTab(url, obj) { var tab = gBrowser.addTab(url, {skipAnimation: true}); tab.style.setProperty("display", "none", "important"); return new Promise(resolve => { var result, stop, destroy = () => { if (!stop) resolve(result), gBrowser.removeTab(tab), stop = true; } setTimeout(destroy, 500); try { tab.linkedBrowser.addEventListener("DOMContentLoaded", async e => { var sheet = this.getSheet(e.target, this.contentSheetURL); if (sheet) result = await this.reload(sheet, obj); destroy(); }, {once: true}); } catch(ex) { destroy(); } }); }, getSheet(doc, href) { var sheets = InspectorUtils.getAllStyleSheets(doc); return sheets.find(sheet => sheet.href == href); }, get contentSheetURL() { var file = Services.dirsvc.get("UChrm", Ci.nsIFile); file.append("userContent.css"); if (!file.exists()) return null; delete this.contentSheetURL; return this.contentSheetURL = Services.io.newFileURI(file).spec; }, get restyle() { var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); var uri = Services.io.newURI("data:text/css,:root{}"), type = sss.USER_SHEET; delete this.restyle; return this.restyle = delay => setTimeout(() => { sss.loadAndRegisterSheet(uri, type); sss.unregisterSheet(uri, type); }, delay); }, get chromeSheet() { var file = Services.dirsvc.get("UChrm", Ci.nsIFile); file.append("userChrome.css"); if (!file.exists()) return null; var href = Services.io.newFileURI(file).spec; var sheet = this.getSheet(document, href); if (!sheet) return null; delete this.chromeSheet; return this.chromeSheet = sheet; } });
эта вроде работает
Отсутствует
Dumby
У всех так? и вообще у меня все время удаляются еще 10 расширений, может кастыли не
правильно поставил на 65.0.1? ну которые дают работать с bootstrap и CB...
На чистом профиле тоже самое, CB пашет, зато расширения отваливаются.
Причина только в костылях config.js но что я не так сделал?
Отредактировано func4ptch4 (20-02-2019 13:46:08)
Отсутствует