Dumby
Где поганка зарыта? В 77 не работает...
// Сохранить иконку текущего сайта с диалогом сохранения ............. function saveFavicon() { var uri = gBrowser.currentURI; function getSiteName() { try { var domain = uri.host.split('.') } catch(e) { return "" }; domain = (domain.length == 2) ? domain[0] : domain[1] return domain.charAt(0).toUpperCase() + domain.slice(1).split('.')[0] + " "; }; var url = gBrowser.selectedTab.image; url && saveImageURL( url, getSiteName(), null, false, false, null, null, /^data:(image\/[^;,]+)/i.test(url) ? RegExp.$1.toLowerCase() : Cc["@mozilla.org/mime;1"] .getService(Ci.nsIMIMEService).getTypeFromURI(Services.io.newURI(url)), null, PrivateBrowsingUtils.isContentWindowPrivate(content || window), document.nodePrincipal ); };
Отсутствует
А что там с 78b? Кнопки на панели не выводятся
Нормально всё с ней.
Собрал сейчас портабл 78.0b7, поставил CB 0.0.7.0.0.15a1,
насоздавал кнопок и рассовал по тулбарам.
На всякий случай пересобрал из en-US, выбросил startupCache,
даже e10s отключал, — все кнопки на своих местах.
Отсутствует
а можно ваш портабл с CB и кнопками?
Вот уж нет. «Совсем обленились».
Если что-то делал и не получилось, то рассказывай что именно делал.
Только не точки гуськом, а подробно: цифры, ссылки, скрипты, пути, кодировки и т.п.,
чтобы был шанс понять где и что пошло не так, и, может, указать на это.
Отсутствует
Если что-то делал и не получилось, то рассказывай что именно делал.
custom buttons я установил успешно только вот кнопка ,,видео в плеере,,не реагирует вообше никак,я ей пользуюсь часто просто.
https://anonfiles.com/LaLbxbA9o1/videovpleer_txt
Отсутствует
Ребята, тут на форуме есть кнопка, от bunda1 которая открывает https://translate.google.com/ и вставляет выделенный текст или текст из буфера обмена по CКМ https://forum.mozilla-russia.org/viewtopic.php?pid=486850#p486850
Сейчас есть своя кнопка, которая при нажатии ЛКМ переводит страницу гугловским виджетом.
Вот этот код
var vert = ` javascript:{var d, b, o, v, p; b = (d = document).body; o = d.createElement('script'); o.setAttribute('src', 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit'); o.setAttribute('type', 'text/javascript'); b.appendChild(o); v = b.insertBefore(d.createElement('div'), b.firstChild); v.id = 'google_translate_element'; v.style.display = 'none'; p = d.createElement('script'); p.text = 'function googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:""},"google_translate_element");}'; p.setAttribute('type', 'text/javascript'); b.appendChild(p)};void(0);` ; gBrowser. loadURI(vert, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() });
Хотел бы оставить свой код с вызовом Виджета по ЛКМ, а на правую кнопку мыши я хотел бы назначить из кода кнопки от bunda1 эту опцию:
перевод выделенного текста или текст из буфера обмена с помощью сервиса Google
Не поможете ли?
Отредактировано leex (17-06-2020 10:13:00)
Отсутствует
shulep22 пишет: «а можно ваш портабл с CB и кнопками?»
Вот уж нет. «Совсем обленились»…
Могу предложить свой настроенный профиль (архив 8Мб) Basilisk CustomButtons + userChrome
В нём 4 новых кнопки, расширены возможности старых: Избранное, Звёздочка, Обновить, Загрузка, Печать, Закрыть…
Подробные подсказки есть на каждой кнопке, в описании на форуме и в прилагаемом скриншоте.
Отсутствует
Подмогните, как убить конт.меню на кнопке +(Новая вкладка) в браузере PaleMoon.
Сейчас сделал такую ф-цию:
// --------- NewTab Button: CКМ - загрузить из буфера обмена ----------- // AttributeInspector выдал такие данные на кнопке +(NewTab): //xul:toolbarbutton [30×31.200] //namespaceURI: XUL //margin: 0 0 0 -1px //border: 1px //padding: 3px 1px 4px 1px //class = tabs-newtab-button //command = cmd_newNavigatorTab //onclick = checkForMiddleClick(this, event); //oncommand = BrowserOpenTab(); //onmouseout = document.getBindingParent(this)._leaveNewTab(); //onmouseover = document.getBindingParent(this)._enterNewTab(); //tooltiptext = Открыть новую вкладку // (function() { const newTabBtn = document.getAnonymousElementByAttribute( gBrowser.mTabContainer, "class", "tabs-newtab-button"); newTabBtn.setAttribute("oncommand", ""); // не помогает newTabBtn.setAttribute("onclick", "newTabAct(event);"); this.newTabAct = function(e) { e.target.oncontextmenu =()=> {return false}; // не помогает switch(e.button) { case 0: BrowserOpenTab(); break; case 1: gBrowser.loadOneTab( 'about:newtab', null, null, null, false, false, false); break; case 2: gBrowser.loadOneTab( gClipboard.read(), null, null, null, false, false, false); break; }; }; newTabBtn.setAttribute("tooltiptext", "· ЛКМ - Нов.Вкладка\n\· СКМ - NewTab страница с сайтами\n\· ПКМ - из Буфера обмена загрузить ссылку"); })();
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
конт.меню появляется по ПКМ
Какой неприятный глюк, воспроизводится, мягко говоря, не при каждом ПКМ.
Может просто чуть тормознуть открытие вкладки. Рестарт.
(btn => { var tab = arg => gBrowser.loadOneTab( arg ? gClipboard.read() : "about:newtab", null, null, null, false, false, false ); var mod = e => e.ctrlKey || e.shiftKey; addEventListener("contextmenu", e => mod(e) || e.preventDefault(), false, btn); btn.checkForMiddleClick = (b, e) => { if (e.button) e.button == 1 ? tab() : mod(e) || requestAnimationFrame(tab); } addDestructor(() => delete btn.checkForMiddleClick); })(document.getAnonymousElementByAttribute(gBrowser.mTabContainer, "class", "tabs-newtab-button"));
Отсутствует
Какой неприятный глюк, воспроизводится, мягко говоря, не при каждом ПКМ.
Точно так, очень неприятный. По-моему разумению, жмакания мыша(клики) на Панели, должны бы обрабатываться Панелью. А уже дальше передаваться чему-то, что на этой панели нах-ся. А тут как-то не так.
Это дилетанта\любителя взгляд, так мне каж... а как дОлжно или принято у кодеров, яхз. Возможно ошибаюсь я.
Благодарю, О, великий, за помощь. Сработало и убит гад_ццкий клик. Очередной раз, буду несколько дней переводить с Высокого Эльфийского на доступный_человечий... , но это уже мои уроки и усилия. Несколько кнопок уже перевел, получилось. Выручаешь ты нас часто, слабачков, благодарю Dumby. Рукужму.
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
Dumby, не поправите пару кнопок?
Первая кнопка работает на крайней версии в однопроцессорном режиме, а вот в многопроцессорном отказывается. Консоль жалуется на "content".
this.onmousedown =e=> { this.__defineGetter__("scroller", function() { var doc = content.document; var root = doc.documentElement; var body = doc.body || root; return body.scrollHeight > root.scrollHeight ? body : root; }); this.onmouseup =e=>{ // левый клик if ( e.button && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) return; clearTimeout(self.timer); var scroller = this.scroller; if(scroller.scrollTop !=0 ) content.scrollTo(scroller.scrollHeight, 0); else content.scrollTo(0, scroller.scrollHeight); } if ( e.button == 0 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) // длинный левый клик self.timer = setTimeout(()=>{ self.onmouseup = ''; var scroller = this.scroller; content.scrollTo(0, (scroller.scrollHeight - scroller.clientHeight)/2); }, 500); this.onclick =e=> { // правый клик if ( e.button == 2 ) gShowPopup(this); } }; self.onclick =e=> e.preventDefault(); // Подсказка для кнопки .......... this.onmouseover =()=> { this.tooltipText = "ЛКМ: Вверх/Вниз по странице \nдЛКМ: Центрирование страницы" }
Вторая кнопка - "Сохранять изображение без запроса в указанную папку" - на 76 версии ещё работала нормально, а 77 версии при сохранении изображения стала постоянно открывать диалоговое окно с выбором папки сохранения.
// Сохранять изображение без запроса в указанную папку, из контекстного меню .......... ((contextMenu, viewimage) => { var path = 'E:\\Download'; var menuItem = contextMenu.insertBefore(document.createElement("menuitem"), viewimage); menuItem.setAttribute("label", "Сохранить изображение в папку: " + path); menuItem.setAttribute("class", "menuitem-iconic"); menuItem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABAnAAAQJwAAAAAAAAAAAAAAAAEGAQECKAABATsAAAAoAAAAFAAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIjRRXUVtk8U+Y4TGKUBYrRgmNpcOFR91BQgMWAECBD8AAQEqAAAAGAAAAAwAAAAGAAAAAQAAAAAAAAAAAAAAAEVrp7Nws9//fcr6/3W+9f5wten5ZKHQ7lWGsedDaI7QL0hjtR4sQKERGSaBBgkOXgAAACoAAAAEAAAAAAAAAABKdrK+aqjY/4XO7P+AyfL/fcXy/4HL+/97xPT/eMHy/3e+8f9trt77YpvI8Ux0m98TGymTAAAAJQAAAAAAAAAAVIS7yGWh0/8yTVv/UniH/0htff+L0e//WIab/0x2i/9XiKL/RGp+/zNRYv9dkrP+S26S2QQGClwAAAAGAAAAAGeYxtFxrtr/IDA7/01mbf8sPkP/SWZw/zlSWv88Vl//LkRL/3Wsv/83UVr/XYqe/3+51PQaJDCWAAAAGwAAAAB5qtHajMXk/yY1Pf9fa23/GB8g/2yGjP8mMDL/Sl9k/0RYXP9wmKL/dZ+r/4i6y/+n4PD+TmV5yQECA0UAAAACh7bX46zh8/9tjZj/gpen/4GMk//G4Oj/kJ6f/52clf+svbz/f5id/3yXnv+gx9L/wez1/5u0xuwPExt+AAAAEJTA3ey/7vr/ve35/7Hf8v+w0ub/ubvE/8a4uf/NwLv/083I/9Pl6//T7ff/0O32/9fw9v/a6vL8P0ZYtAAAAC+iy+P2zvX8/831/P/K6e3/y7Kg/+GNZf/vlWr/6Zx3/9qegv/Ino7/t8TQ/7HM4/+itc3yu8ja52BtirQAAAEkqs/l9dv8/f/b/P3/1dzU/9qXcf/slmb/+aFr//+td//+rXb/+aRu/9+1k/+/2uL/RldrtiIrPU0ZITEoAAAAA46017zX8Pf85/7+/+X8+//g7+3+yryw+O6odPz/wYj/9bJ7/+KpgP/nqn3/0tPJ/kRTY6QAAQEYAAAAAAAAAAA6V3Yuboyqj6C81My50ubgo7zR1I92bLbzt3/3/tGZ/8aTZttfY2+PbX2Sn3GFm7EiLDtNAAAABQAAAAAAAAAAAgMEAAUHCgYYJDETIS4+LjMwNU+3e029/NGZ/vHHlPRrSSx/BQUFEAMFBwcEBQcJAQECAgAAAAAAAAAAAAAAAAAAAAAAAAAAEQgAA1wvElSsaz3B9LZ8+fC7gu6WZ0COFg0GGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcTAQrWbS+y7pdZ8eOVWMqUWy91IRIJFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AACf/wAAgH8AAIAfAACADwAAgA8AAIAHAACABwAAgA8AAIAPAADOHwAA/v8AAP//AAD//wAA//8AAA=="); addDestructor(()=> menuItem.remove()); addEventListener("popupshowing", e=> menuItem.hidden = viewimage.hidden, false, contextMenu); menuItem.onclick =()=> { var run = cbu.getPrefs("browser.download.folderList"); var use = cbu.getPrefs("browser.download.useDownloadDir"); try { var dir = Services.prefs.getComplexValue("browser.download.dir", Ci.nsISupportsString).data } catch(e) { var dir = Services.downloads.defaultDownloadsDirectory.path }; cbu.setPrefs("browser.download.folderList", 2); cbu.setPrefs("browser.download.useDownloadDir", true); cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", path)); save(); cbu.setPrefs("browser.download.folderList", run); cbu.setPrefs("browser.download.useDownloadDir", use); cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", dir)); }; function save() { var func = eval( gContextMenu.saveMedia.toSource() .replace(/(false,\s+)false,/, "$1true,") .replace(/^s/, "0,function s") ); (save = () => func.call(gContextMenu))(); }; function convertFromUnicode(charset, str) { var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); converter.charset = charset; str = converter.ConvertFromUnicode(str); return str + converter.Finish(); }; })(document.getElementById("contentAreaContextMenu"), document.getElementById("context-viewimageinfo"));
«The Truth Is Out There»
Отсутствует
unter_officer пример - в начало страницы для многопроцессорного:
var tabMM = gBrowser.selectedBrowser.messageManager;
tabMM.loadFrameScript("data:, content.scrollTo(0,0)", false);
Отсутствует
не поправите пару кнопок?
OK, попробую.
(u => { var id, lfs = url => gBrowser.selectedBrowser.messageManager.loadFrameScript(url, false); var max = () => { var url = u([ "var args = [scroller.scrollHeight, 0];", "scroller.scrollTop != 0 || args.reverse();", "content.scrollTo(...args);" ].join("\n\t")); (max = () => lfs(url))(); } var mid = () => { var url = u("content.scrollTo(0, (scroller.scrollHeight - scroller.clientHeight) / 2);"); (mid = () => id = lfs(url))(); } var obj = { mousedown: () => id = setTimeout(mid, 500), mouseup: () => id && max(id = clearTimeout(id)) }; this.onmousedown = this.onmouseup = e => e.button || obj[e.type](); this.tooltipText = "ЛКМ: Вверх/Вниз по странице \nдЛКМ: Центрирование страницы"; })(code => "data:," + encodeURIComponent(`(doc => { var root = doc.documentElement; var body = doc.body || root; var scroller = body.scrollHeight > root.scrollHeight ? body : root; ${code} })(content.document)`));
(viewimage => addEventListener("popupshowing", { path: "E:\\Download", handleEvent(e) { if (viewimage.hidden) return; var menuitem = document.createXULElement("menuitem"); menuitem.className = "menuitem-iconic"; menuitem.setAttribute("oncommand", "saveImg()"); menuitem.setAttribute("label", "Сохранить изображение в папку: " + this.path); menuitem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAABAnAAAQJwAAAAAAAAAAAAAAAAEGAQECKAABATsAAAAoAAAAFAAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIjRRXUVtk8U+Y4TGKUBYrRgmNpcOFR91BQgMWAECBD8AAQEqAAAAGAAAAAwAAAAGAAAAAQAAAAAAAAAAAAAAAEVrp7Nws9//fcr6/3W+9f5wten5ZKHQ7lWGsedDaI7QL0hjtR4sQKERGSaBBgkOXgAAACoAAAAEAAAAAAAAAABKdrK+aqjY/4XO7P+AyfL/fcXy/4HL+/97xPT/eMHy/3e+8f9trt77YpvI8Ux0m98TGymTAAAAJQAAAAAAAAAAVIS7yGWh0/8yTVv/UniH/0htff+L0e//WIab/0x2i/9XiKL/RGp+/zNRYv9dkrP+S26S2QQGClwAAAAGAAAAAGeYxtFxrtr/IDA7/01mbf8sPkP/SWZw/zlSWv88Vl//LkRL/3Wsv/83UVr/XYqe/3+51PQaJDCWAAAAGwAAAAB5qtHajMXk/yY1Pf9fa23/GB8g/2yGjP8mMDL/Sl9k/0RYXP9wmKL/dZ+r/4i6y/+n4PD+TmV5yQECA0UAAAACh7bX46zh8/9tjZj/gpen/4GMk//G4Oj/kJ6f/52clf+svbz/f5id/3yXnv+gx9L/wez1/5u0xuwPExt+AAAAEJTA3ey/7vr/ve35/7Hf8v+w0ub/ubvE/8a4uf/NwLv/083I/9Pl6//T7ff/0O32/9fw9v/a6vL8P0ZYtAAAAC+iy+P2zvX8/831/P/K6e3/y7Kg/+GNZf/vlWr/6Zx3/9qegv/Ino7/t8TQ/7HM4/+itc3yu8ja52BtirQAAAEkqs/l9dv8/f/b/P3/1dzU/9qXcf/slmb/+aFr//+td//+rXb/+aRu/9+1k/+/2uL/RldrtiIrPU0ZITEoAAAAA46017zX8Pf85/7+/+X8+//g7+3+yryw+O6odPz/wYj/9bJ7/+KpgP/nqn3/0tPJ/kRTY6QAAQEYAAAAAAAAAAA6V3Yuboyqj6C81My50ubgo7zR1I92bLbzt3/3/tGZ/8aTZttfY2+PbX2Sn3GFm7EiLDtNAAAABQAAAAAAAAAAAgMEAAUHCgYYJDETIS4+LjMwNU+3e029/NGZ/vHHlPRrSSx/BQUFEAMFBwcEBQcJAQECAgAAAAAAAAAAAAAAAAAAAAAAAAAAEQgAA1wvElSsaz3B9LZ8+fC7gu6WZ0COFg0GGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcTAQrWbS+y7pdZ8eOVWMqUWy91IRIJFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AACf/wAAgH8AAIAfAACADwAAgA8AAIAHAACABwAAgA8AAIAPAADOHwAA/v8AAP//AAD//wAA//8AAA=="); viewimage.before(menuitem); addDestructor(() => menuitem.remove()); this.handleEvent = () => menuitem.hidden = viewimage.hidden; menuitem.saveImg = () => { var p = Services.prefs; var data = Object.assign(Object.create(null), { "browser.download.folderList": {type: "Int", set: 2}, "browser.download.useDownloadDir": {type: "Bool", set: true}, "browser.download.dir": {type: "String", set: this.path} }); var save = eval(`(function ${gContextMenu.saveMedia})`.replace( "\n false, // don't", "\n true, //" )); (menuitem.saveImg = () => { for(var pref in data) { var obj = data[pref], meth = `et${obj.type}Pref`; obj.val = p.prefHasUserValue(pref) ? p["g" + meth](pref) : null; p["s" + meth](pref, obj.set); } try {save.call(gContextMenu);} finally { for(var pref in data) data[pref].val === null ? p.clearUserPref(pref) : p[`set${data[pref].type}Pref`](pref, data[pref].val); } })(); } } }, false, viewimage.parentNode || 1))(document.getElementById("context-viewimageinfo"));
Отсутствует
Dumby
Поздрав! Перешел на десятку(пришлось)...Это нечто...Мало того шрифты в теме и цвета хрен знает как рихтовать (через реестр?). так теперь winrar падает поле рихтовки omni.ja . Надо выходить с него все время иначе виснет. И в реесте права не могу задать...ветвь не могу удалить. Macromedia adobe - выбросил из под dos загрузчика , а в реестре никак...
Отсутствует
OK, попробую.
Dumby, большое спасибо. Как всегда всё супер!
P.S. А вообще с этим многопроцессорным гемор какой-то. Пока правил эти кнопки, выплыло ещё несколько не работающих.
Переключился пока обратно, в однопроцессорный. Начну разбираться когда будет время.
«The Truth Is Out There»
Отсутствует
Dumby, не поправите ещё одну кнопочку?
Такая же история - в однопроцессорном режиме работает, а в многопроцессорном отказывается.
/*CODE*/ // Кнопка сохраняет страницу с картинками или её часть, если она выделена, в html одним файлом .......... var saveToFile = function (fileContent, fileName) { var uc = Cc['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Ci.nsIScriptableUnicodeConverter); uc.charset = 'utf-8'; fileContent = uc.ConvertFromUnicode(fileContent); var nsIFilePicker = Ci.nsIFilePicker; var fp = Cc['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker); fp.init(window, '', fp.modeSave); fp.defaultString = fileName; fp.appendFilters(fp.filterHTML); fp.appendFilters(fp.filterAll); fp.open(function (rv) { if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) { var stream = Cc['@mozilla.org/network/file-output-stream;1'].createInstance(Ci.nsIFileOutputStream); stream.init(fp.file, 0x02|0x20|0x08, 0666, 0); stream.write(fileContent, fileContent.length); stream.close(); } }); }; var resolveURL = function (url, base) { try { var ioService = Cc['@mozilla.org/network/io-service;1'].getService(Ci.nsIIOService); var baseURI = ioService.newURI(base, null, null); var absURI = ioService.newURI(url, null, baseURI); return absURI.spec; } catch (e) {} }; var getSelWin = function (w) { if (w.getSelection().toString()) return w; for (var i = 0, f, r; f = w.frames[i]; i++) { try { if (r = getSelWin(f)) return r; } catch(e) {} } }; var encodeImg = function (src, obj) { var canvas, img, ret = src; if (/^https?:\/\//.test(src)) { canvas = doc.createElement('canvas'); if (!obj || obj.nodeName.toLowerCase() != 'img') { img = doc.createElement('img'); img.src = src; } else { img = obj; }; if (img.complete) try{ canvas.width = img.width; canvas.height = img.height; canvas.getContext('2d').drawImage(img, 0, 0); ret = canvas.toDataURL((/\.jpe?g/i.test(src) ? 'image/jpeg' : 'image/png')); } catch (e) {}; if (img != obj) img.src = 'about:blank'; }; return ret; }; var toSrc = function (obj) { var strToSrc = function (str) { var chr, ret = '', i = 0, meta = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '\x22' : '\\\x22', '\\': '\\\\'}; while (chr = str.charAt(i++)) { ret += meta[chr] || chr; }; return '\x22' + ret + '\x22'; }, arrToSrc = function (arr) { var ret = []; for (var i = 0; i < arr.length; i++) { ret[i] = toSrc(arr[i]) || 'null'; }; return '[' + ret.join(',') + ']'; }, objToSrc = function (obj) { var val, ret = []; for (var prop in obj) { if (obj.hasOwnProperty(prop) && (val = toSrc(obj[prop]))) ret.push(strToSrc(prop) + ': ' + val); }; return '{' + ret.join(',') + '}'; }; switch (Object.prototype.toString.call(obj).slice(8, -1)) { case 'Array': return arrToSrc(obj); case 'Boolean': case 'Function': case 'RegExp': return obj.toString(); case 'Date': return 'new Date(' + obj.getTime() + ')'; case 'Math': return 'Math'; case 'Number': return isFinite(obj) ? String(obj) : 'null'; case 'Object': return objToSrc(obj); case 'String': return strToSrc(obj); default: return obj ? (obj.nodeType == 1 && obj.id ? 'document.getElementById(' + strToSrc(obj.id) + ')' : '{}') : 'null'; } }; var mainWin = document.commandDispatcher.focusedWindow.top == content ? document.commandDispatcher.focusedWindow : content var selWin = getSelWin(mainWin), win = selWin || mainWin, doc = win.document, loc = win.location; var ele, pEle, clone, reUrl = /(url\(\x22)(.+?)(\x22\))/g; if (selWin) { var rng = win.getSelection().getRangeAt(0); pEle = rng.commonAncestorContainer; ele = rng.cloneContents(); } else { pEle = doc.documentElement; ele = (doc.body || doc.getElementsByTagName('body')[0]).cloneNode(true); }; while (pEle) { if (pEle.nodeType == 1) { clone = pEle.cloneNode(false); clone.appendChild(ele); ele = clone; }; pEle = pEle.parentNode }; var sel = doc.createElement('div'); sel.appendChild(ele); for (var el, all = sel.getElementsByTagName('*'), i = all.length; i--;) { el = all[i]; if (el.style && el.style.backgroundImage) el.style.backgroundImage = el.style.backgroundImage.replace(reUrl, function (a, prev, url, next) { if (!/^[a-z]+:/.test(url)) url = resolveURL(url, loc.href); return prev + encodeImg(url) + next; }); switch (el.nodeName.toLowerCase()) { case 'link': case 'style': case 'script': el.parentNode.removeChild(el); break; case 'a': case 'area': if (el.hasAttribute('href') && el.getAttribute('href').charAt(0) != '#') el.href = el.href; break; case 'img': case 'input': if (el.hasAttribute('src')) el.src = encodeImg(el.src, el); break; case 'audio': case 'video': case 'embed': case 'frame': case 'iframe': if (el.hasAttribute('src')) el.src = el.src; break; case 'object': if (el.hasAttribute('data')) el.data = el.data; break; case 'form': if (el.hasAttribute('action')) el.action = el.action; break; } }; var head = ele.insertBefore(doc.createElement('head'), ele.firstChild); var meta = doc.createElement('meta'); meta.httpEquiv = 'content-type'; meta.content = 'text/html; charset=utf-8'; head.appendChild(meta); var title = doc.getElementsByTagName('title')[0]; if (title) head.appendChild(title.cloneNode(true)); head.copyScript = function (unsafeWin) { if ('$' in unsafeWin) return; var f = doc.createElement('iframe'); f.src = 'about:blank'; f.setAttribute('style', 'position:fixed;left:0;top:0;visibility:hidden;width:0;height:0;'); doc.documentElement.appendChild(f); var str, script = doc.createElement('script'); script.type = 'text/javascript'; for (var name in unsafeWin) { if (name in f.contentWindow || !/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)) continue; try { str = toSrc(unsafeWin[name]); if (!/\{\s*\[native code\]\s*\}/.test(str)) { script.appendChild(doc.createTextNode('var ' + name + ' = ' + str.replace(/<\/(script>)/ig, '<\\/$1') + ';\n')); } } catch (e) {}; }; f.parentNode.removeChild(f); if (script.childNodes.length) this.nextSibling.appendChild(script); }; head.copyScript(win.wrappedJSObject || win); head.copyStyle = function (s) { if (!s) return; var style = doc.createElement('style'); style.type = 'text/css'; if (s.media && s.media.mediaText) style.media = s.media.mediaText; try { for (var i = 0, rule; rule = s.cssRules[i]; i++) { if (rule.type != 3) { if((!rule.selectorText || rule.selectorText.indexOf(':') != -1) || (!sel.querySelector || sel.querySelector(rule.selectorText))) { var css = !rule.cssText ? '' : rule.cssText.replace(reUrl, function (a, prev, url, next) { if (!/^[a-z]+:/.test(url)) url = resolveURL(url, s.href || loc.href); if(rule.type == 1 && rule.style && rule.style.backgroundImage) url = encodeImg(url); return prev + url + next; }); style.appendChild(doc.createTextNode(css + '\n')); } } else { this.copyStyle(rule.styleSheet); } } } catch(e) { if (s.ownerNode) style = s.ownerNode.cloneNode(false); }; this.appendChild(style); }; var sheets = doc.styleSheets; for (var j = 0; j < sheets.length; j++) head.copyStyle(sheets[j]); head.appendChild(doc.createTextNode('\n')); var doctype = '', dt = doc.doctype; if (dt && dt.name) { doctype += '<!DOCTYPE ' + dt.name; if (dt.publicId) doctype += ' PUBLIC \x22' + dt.publicId + '\x22'; if (dt.systemId) doctype += ' \x22' + dt.systemId + '\x22'; doctype += '>\n'; }; var fileName = selWin ? win.getSelection().toString() : (title && title.text ? title.text : loc.pathname.split('/').pop()); fileName = fileName.replace(/[:\\\/<>?*|"]+/g, '').replace(/[\.]+/ig, ' ').replace(/[\,]+/ig, ' ').replace(/\s+/g, '_').slice(0, 100).replace(/^\s+|\s+$/g, ''); fileName += (function () { var d = new Date(), z = function(n){return (n < 10 ? '0' : '') + n}; return '_' + '[' + z(d.getFullYear()) + '_' + z(d.getMonth()+1) + '_' + z(d.getDate()) + '—' + z(d.getHours()) + '_' + z(d.getMinutes()) + '_' + z(d.getSeconds()) + ']'; })(); if(!/\.html?$/.test(fileName))fileName += '.html'; saveToFile(doctype + sel.innerHTML + '\n<!-- This document saved from ' + (loc.protocol != 'data:' ? loc.href : 'data:uri') + ' -->', fileName);
Отредактировано unter_officer (22-06-2020 16:50:58)
«The Truth Is Out There»
Отсутствует
unter_officer
В Инициализацию
(func => this._handleClick = () => { var saveToFile = (fileContent, fileName) => { var uc = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); uc.charset = "utf-8"; fileContent = uc.ConvertFromUnicode(fileContent); var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker); fp.init(window, "", fp.modeSave); fp.defaultString = fileName; fp.appendFilters(fp.filterHTML); fp.appendFilters(fp.filterAll); fp.open(rv => { if (rv != fp.returnOK && rv != fp.returnReplace) return; var stream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream); stream.init(fp.file, 0x02|0x20|0x08, 0o666, 0); stream.write(fileContent, fileContent.length); stream.close(); }); } var msgName = _id + ":SaveSnapshotToHTML"; var msgListener = msg => saveToFile(...msg.data); messageManager.addMessageListener(msgName, msgListener); addDestructor(() => messageManager.removeMessageListener(msgName, msgListener)); var url = "data:," + encodeURIComponent( `(${func})(ChromeUtils.import("resource://gre/modules/Services.jsm").Services);`.replace("%MSG_NAME%", msgName) ); (this._handleClick = () => gBrowser.selectedBrowser.messageManager.loadFrameScript(url, false))(); })(({io, focus}) => { var resolveURL = function (url, base) { try { return io.newURI(url, null, io.newURI(base)).spec; } catch {} }; var getSelWin = function (w) { if (w.getSelection().toString()) return w; for (var i = 0, f, r; f = w.frames[i]; i++) { try { if (r = getSelWin(f)) return r; } catch(e) {} } }; var encodeImg = function (src, obj) { var canvas, img, ret = src; if (/^https?:\/\//.test(src)) { canvas = doc.createElement('canvas'); if (!obj || obj.nodeName.toLowerCase() != 'img') { img = doc.createElement('img'); img.src = src; } else { img = obj; }; if (img.complete) try{ canvas.width = img.width; canvas.height = img.height; canvas.getContext('2d').drawImage(img, 0, 0); ret = canvas.toDataURL((/\.jpe?g/i.test(src) ? 'image/jpeg' : 'image/png')); } catch (e) {}; if (img != obj) img.src = 'about:blank'; }; return ret; }; var toSrc = function (obj) { var strToSrc = function (str) { var chr, ret = '', i = 0, meta = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '\x22' : '\\\x22', '\\': '\\\\'}; while (chr = str.charAt(i++)) { ret += meta[chr] || chr; }; return '\x22' + ret + '\x22'; }, arrToSrc = function (arr) { var ret = []; for (var i = 0; i < arr.length; i++) { ret[i] = toSrc(arr[i]) || 'null'; }; return '[' + ret.join(',') + ']'; }, objToSrc = function (obj) { var val, ret = []; for (var prop in obj) { if (obj.hasOwnProperty(prop) && (val = toSrc(obj[prop]))) ret.push(strToSrc(prop) + ': ' + val); }; return '{' + ret.join(',') + '}'; }; switch (Object.prototype.toString.call(obj).slice(8, -1)) { case 'Array': return arrToSrc(obj); case 'Boolean': case 'Function': case 'RegExp': return obj.toString(); case 'Date': return 'new Date(' + obj.getTime() + ')'; case 'Math': return 'Math'; case 'Number': return isFinite(obj) ? String(obj) : 'null'; case 'Object': return objToSrc(obj); case 'String': return strToSrc(obj); default: return obj ? (obj.nodeType == 1 && obj.id ? 'document.getElementById(' + strToSrc(obj.id) + ')' : '{}') : 'null'; } }; var mainWin = {}; focus.getFocusedElementForWindow(content, true, mainWin); mainWin = mainWin.value; var selWin = getSelWin(mainWin), win = selWin || mainWin, doc = win.document, loc = win.location; var ele, pEle, clone, reUrl = /(url\(\x22)(.+?)(\x22\))/g; if (selWin) { var rng = win.getSelection().getRangeAt(0); pEle = rng.commonAncestorContainer; ele = rng.cloneContents(); } else { pEle = doc.documentElement; ele = (doc.body || doc.getElementsByTagName('body')[0]).cloneNode(true); }; while (pEle) { if (pEle.nodeType == 1) { clone = pEle.cloneNode(false); clone.appendChild(ele); ele = clone; }; pEle = pEle.parentNode }; var sel = doc.createElement('div'); sel.appendChild(ele); for (var el, all = sel.getElementsByTagName('*'), i = all.length; i--;) { el = all[i]; if (el.style && el.style.backgroundImage) el.style.backgroundImage = el.style.backgroundImage.replace(reUrl, function (a, prev, url, next) { if (!/^[a-z]+:/.test(url)) url = resolveURL(url, loc.href); return prev + encodeImg(url) + next; }); switch (el.nodeName.toLowerCase()) { case 'link': case 'style': case 'script': el.parentNode.removeChild(el); break; case 'a': case 'area': if (el.hasAttribute('href') && el.getAttribute('href').charAt(0) != '#') el.href = el.href; break; case 'img': case 'input': if (el.hasAttribute('src')) el.src = encodeImg(el.src, el); break; case 'audio': case 'video': case 'embed': case 'frame': case 'iframe': if (el.hasAttribute('src')) el.src = el.src; break; case 'object': if (el.hasAttribute('data')) el.data = el.data; break; case 'form': if (el.hasAttribute('action')) el.action = el.action; break; } }; var head = ele.insertBefore(doc.createElement('head'), ele.firstChild); var meta = doc.createElement('meta'); meta.httpEquiv = 'content-type'; meta.content = 'text/html; charset=utf-8'; head.appendChild(meta); var title = doc.getElementsByTagName('title')[0]; if (title) head.appendChild(title.cloneNode(true)); head.copyScript = function (unsafeWin) { if ('$' in unsafeWin) return; var f = doc.createElement('iframe'); f.src = 'about:blank'; f.setAttribute('style', 'position:fixed;left:0;top:0;visibility:hidden;width:0;height:0;'); doc.documentElement.appendChild(f); var str, script = doc.createElement('script'); script.type = 'text/javascript'; for (var name in unsafeWin) { if (name in f.contentWindow || !/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)) continue; try { str = toSrc(unsafeWin[name]); if (!/\{\s*\[native code\]\s*\}/.test(str)) { script.appendChild(doc.createTextNode('var ' + name + ' = ' + str.replace(/<\/(script>)/ig, '<\\/$1') + ';\n')); } } catch (e) {}; }; f.parentNode.removeChild(f); if (script.childNodes.length) this.nextSibling.appendChild(script); }; head.copyScript(win.wrappedJSObject || win); head.copyStyle = function (s) { if (!s) return; var style = doc.createElement('style'); style.type = 'text/css'; if (s.media && s.media.mediaText) style.media = s.media.mediaText; try { for (var i = 0, rule; rule = s.cssRules[i]; i++) { if (rule.type != 3) { if((!rule.selectorText || rule.selectorText.indexOf(':') != -1) || (!sel.querySelector || sel.querySelector(rule.selectorText))) { var css = !rule.cssText ? '' : rule.cssText.replace(reUrl, function (a, prev, url, next) { if (!/^[a-z]+:/.test(url)) url = resolveURL(url, s.href || loc.href); if(rule.type == 1 && rule.style && rule.style.backgroundImage) url = encodeImg(url); return prev + url + next; }); style.appendChild(doc.createTextNode(css + '\n')); } } else { this.copyStyle(rule.styleSheet); } } } catch(e) { if (s.ownerNode) style = s.ownerNode.cloneNode(false); }; this.appendChild(style); }; var sheets = doc.styleSheets; for (var j = 0; j < sheets.length; j++) head.copyStyle(sheets[j]); head.appendChild(doc.createTextNode('\n')); var doctype = '', dt = doc.doctype; if (dt && dt.name) { doctype += '<!DOCTYPE ' + dt.name; if (dt.publicId) doctype += ' PUBLIC \x22' + dt.publicId + '\x22'; if (dt.systemId) doctype += ' \x22' + dt.systemId + '\x22'; doctype += '>\n'; }; var fileName = selWin ? win.getSelection().toString() : (title && title.text ? title.text : loc.pathname.split('/').pop()); fileName = fileName.replace(/[:\\\/<>?*|"]+/g, '').replace(/[\.]+/ig, ' ').replace(/[\,]+/ig, ' ').replace(/\s+/g, '_').slice(0, 100).replace(/^\s+|\s+$/g, ''); fileName += (function () { var d = new Date(), z = function(n){return (n < 10 ? '0' : '') + n}; return '_' + '[' + z(d.getFullYear()) + '_' + z(d.getMonth()+1) + '_' + z(d.getDate()) + '\u2014' + z(d.getHours()) + '_' + z(d.getMinutes()) + '_' + z(d.getSeconds()) + ']'; })(); if(!/\.html?$/.test(fileName))fileName += '.html'; sendAsyncMessage("%MSG_NAME%", [doctype + sel.innerHTML + '\n<!-- This document saved from ' + (loc.protocol != 'data:' ? loc.href : 'data:uri') + ' -->', fileName]); });
Отсутствует
В Инициализацию
Dumby, огромное спасибо!
«The Truth Is Out There»
Отсутствует
Не знаете почему в 10/64 winrar виснет?
Уговорил. Поставил в виртуалку Win10 Pro и WinRAR 5.90
А насчёт прав на ветвь реестра Macromedia, так в окне разрешений
есть кнопка «Дополнительно», и если там назначить себя владельцем,
(с галкой наследования разрешений дочерними объектами),
то ветвь успешно удаляется.
Заодно проверил стиль, который тебе Виталий давал,
тот, что с «--panel-disabled-color», и тоже прекрасно работает.
Отсутствует