>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Поддержка пользователей http://forum.mozilla-russia.org/viewforum.php?id=26 >Попытка перехода на современные версии Firefox http://forum.mozilla-russia.org/viewtopic.php?id=74158 |
Najlus > 26-12-2018 20:21:17 |
Доброго всем вечера. Долгое время пользовался PaleMoon из-за того, что mozilla нехило так перелопатила firefox, благодаря чему многие из нужных дополнений благополучно отвалились. Но движок там устаревший, из-за чего на сайтах, обмазанных яваскриптом, начали встречаться проблемы, вот и решил попытаться вернуться обратно на ff. За прошедшее время часть дополнений допилили, однако ряд проблем решить так и не удалось, с чем и прошу вас помочь:
Есть ли возможность сделать так, чтоб при закрытии таба лиса переключалась на последний активный таб? Есть ли возможность редактировать контекстные меню, дабы убрать лишние пункты? Есть ли что-то подобное расширению locationbar - эта штука позволяла при клике на часть url перейти к нему. Например, есть некий url с адресом site.domen/forum/loremipsum, и при клике на слово "forum" в нём, браузер переходил на адрес site.domen/forum. ОЧЕНЬ не хватает этой возможности. Подскажите какой нибудь аналог Paste e-mail plus (вставка через контекстное меню заранее заготовленного текста. Желательно с многоуровневым меню). Данный аддон зело глючен и работает не во всех текстовых полях. И не хватает ещё одного дополнения: TabScope - отображение миниатюры сайта при наведении курсора на вкладку. И есть ли возможность открывать вкладки в несколько строк вместо появления прокрутки? Пока что последнее: есть ли возможность убрать кнопку закрытия на активном табе? |
okkamas_knife > 26-12-2018 20:52:56 |
они не стоят столько страданий сколько ты получишь пытаясь перейти на современную версию фф. |
Mishania > 26-12-2018 21:31:09 |
Najlus |
Coroner > 26-12-2018 22:08:44 |
Najlus пишет
Да. Стилем. Как и раньше. Стили никуда не делись. скрытый текст Примерно так: Выделить код Код:#tabContextMenu #context_sendTabToDevice {visibility: collapse !important; display: none !important; } Najlus пишет
С помощью дополнений можно. Искать что-то вроде «new tab». Najlus пишет
Вот тут это как проблему рассматривают. Значит можно. Najlus пишет
Нет и больше никогда не будет. Najlus пишет
Вот тут чловек это стилем забабахл. Не знаю, будет ли работать на 64, но на 57 — работало. Najlus пишет
Стилем. Хотя это странное пожелание, на мой взгляд. |
oleg.sgh > 27-12-2018 06:29:02 |
Najlus
userChrome.css |
Najlus > 27-12-2018 18:22:30 |
Coroner пишет
Написал же - тупо открывают пустую страницу. New Tab Override, вроде, по честному предупреждает, что не умеет в такое. Речь именно о локальном файле, а не о web-адресе. Не, можно, конечно, запихать эту страницу на VPS, но это уже какое-то больное извращение. Coroner пишет
Спасибо, помогло. Хотя, опять же, не всегда срабатывает =_= Coroner пишет
@#$%&!!! Coroner пишет
Уже не работает. Coroner пишет
Каким? 27-12-2018 18:23:03 oleg.sgh пишет
Спасибо. Как бы ещё научиться имена пунктов меню дополнений определять... 27-12-2018 18:23:40 okkamas_knife пишет
Один фиг когда-то придётся переходить - проблема всё чаще встречается. |
oleg.sgh > 27-12-2018 19:10:53 |
Najlus
|
Coroner > 27-12-2018 21:58:05 |
Простите, не видел про «локальный файл». Если не ошибаюсь — тогда никак, кроме того как запилить своё расширение с файлами и подписью. Najlus пишет
Ну как то вот так: 27-12-2018 22:01:04 27-12-2018 22:02:31 Coroner пишет
Если решение обнаружится — сделайте одолжение — сообщите, пожалуйста. Тоже в таком заинтересован. |
Dumby > 28-12-2018 05:10:25 |
Coroner пишет
Скрась ожидание скрытый текст Выделить код Код:menubar#main-menubar > menu#edit-menu > label { -moz-binding: url('data:text/xml,\ <bindings xmlns="http://www.mozilla.org/xbl"><binding id="newtab"><implementation>\%0A\ <constructor>aboutNewTabService.newTabURL="file:///D:/bla.html"</constructor>\%0A\ </implementation></binding></bindings>' ); } |
Coroner > 28-12-2018 11:32:19 |
Dumby пишет
Это чего? И всё?! А как-же без дополнения на сотню килобайт с подписью и локализациями? Восхищаюсь Dumby и бесконечно разочарован аддонописцами, разработчиками Mozilla и вообще всем белым светом. |
Najlus > 29-12-2018 11:45:58 |
Dumby пишет
Спасибо тебе огромнейшее! Coroner пишет
Извиняюсь за дезинформацию - всё же заработало (я не целиком код умудрился скопировать). Правда расстояние между вкладками великовато. |
Najlus > 29-12-2018 14:31:11 |
И ещё вопрос появился - есть ли расширение, добавляющее кнопку в поле адреса, которая будет очищать его от текста? |
Wave > 03-01-2019 13:19:21 |
Dumby пишет
Эм… Я только не понял, а как насчёт открытия любого локального файла, а не заранее прописанного bla.html? |
wayo > 03-01-2019 15:43:51 |
Najlus
Не решение, а просвящения ради. Реализовать такое можно. Нужна маленькая программа-прокси на C++ или чем-то таком и аддон к ней в пару. Оба должны общаться между собой через Native messaging. Аддон посылает сообщение с просьбой открыть файл к программке. Программка открывает. Само сообщение к программке-прокси это команда командной строки и имя открываемого файла. Вообще через Native messaging можно реализовать все, кроме изменения UI. Как пример поискать запущенный профиль Firefox, найти в памяти файлы кэша открытой страницы и запаковать их в архив .mht. Можно также отображать иконку в трее. Которая обменивая сообщениями с Firefox позволяет управлять Firefox. Или прятать в трей, скрывая с панели задачь, если системная панель задач позволяет скрытие. Саму программу-прокси следует упаковать в msi инстолятор для Windows или deb для Ubuntu. И в случае, если у пользователя она не установлена показывать вкладку с ссылкой на программу и предложением установить. Эта тема требует изучения и проб. Говорить подробнее о ней я пока не готов. Еще есть некраисывый способ. Разработчики аддонов вместо открытия локального файла могут показывать пустую страницу с ссылкой на локальный файл (т.к. Web Extensions не позволяет открывать локальные файлы). Пользователь может сам копировать/вставить файл в адрессную строку или перетащить ссылку на панель вкладок и для открытия нажать Enter.
Есть и это Parent Path. Хотя автор мог бы его и получше написать с большим каличеством паттернов url. Сам интерфес дополнения менять теперь не могут, вот во всплывающих окошках показывать могут что угодно. |
Najlus > 03-01-2019 16:58:45 |
wayo пишет
Довольно извращённо, конечно, зато работает. Спасибо. wayo пишет
Чуть выше Dumby уже предложил рабочее решение. Осталось только что-то решить с автоочисткой поля URL при ручном открытии новой вкладки. |
Coroner > 04-01-2019 12:27:22 |
Wave пишет
А это как? Чтобы при открытии новой вкладки окошко с выбором файла выскакивало? |
Vitaliy V. > 04-01-2019 14:03:19 |
del |
Wave > 05-01-2019 21:10:32 |
Кстати, ещё для перехода уровнем выше есть https://github.com/PerfectSlayer/scrollupfolder Coroner, например, поставил я в квантум вебскрапбук для сохранения maff. Как мне сделать, чтобы эти самые maff открывались в квантуме по нажатию энтер на этих maff в файловом менеджере? |
Coroner > 06-01-2019 10:49:31 |
Wave пишет
скрытый текст Это и есть функция открытия файла, но не открытия новой вкладки. А делается сие присвоением ассоциации в операционной системе. Точно также как и открытие html файла. Только открываться он будет, если не ошибаюсь, в текущей вкладке, коли писатели этого вебскрапбука не осилили написать функцию открытия в новой. Но вы здесь, видимо пропустили слова «в новой вкладке»? Это и должен бы делать сам аддон (если по хорошему, позволять выбрать соответствующую опцию). Это уже другой совсем вопрос. Речь ведь шла об открытии новой вкладки «Open New Tab» (Ctrl-T) с локальным файлом в ней (что вы и сами подтвердили в комментарии №6), но не об «Open File in New Tab», которой в Firefox вообще нет, а есть лишь «Open File» (Ctrl-O). Dumby подсказал соответствующее решение. В случаем с maff нужно другое и не знаю возможно ли оно вообще. |
wayo > 06-01-2019 13:07:52 |
Wave пишет
В доке Web Scrapbook описано как https://github.com/danny0838/webscrapbook/wiki/View |
Wave > 06-01-2019 14:37:58 |
Мдя. Способ костыльный и откровенно не универсальный, но если перейду на квантум, буду иметь в виду. |
dezhnev > 23-02-2019 14:58:11 |
есть такая возможность, благодаря старанием ребят с руборды, не помню точно кого скрытый текст #NoEnv SetWorkingDir %A_ScriptDir% SendMode Input CoordMode ToolTip SetTitleMatchMode, 2 SetTitleMatchMode, Slow /* Файл maff.ini: [Main] FileInstall 7za.exe, 7za.exe, 1 23-02-2019 15:04:03 |
okkamas_knife > 23-02-2019 17:38:38 |
не проще ли завести портабельную вверсию старого фф с мафф(или унмхт) и скрапбуком и назначить открытие тех файлов им? |
Andrey_Krropotkin > 23-02-2019 18:55:54 |
Najlus пишет
Кнопка скрытый текст Выделить код Код:(function () { if (location != "chrome://browser/content/browser.xul") return; var URLBarInput = gURLBar.mInputField; var locationBar = URLBarInput.parentNode.appendChild(document.createElement("hbox")); locationBar.style.display = "none"; URLBarInput.parentNode.addEventListener("click", function () { if (URLBarInput.style.display === "none") { URLBarInput.style.display = ""; locationBar.style.display = "none"; gURLBar.select(); } }, false); URLBarInput.parentNode.addEventListener("mouseout", function () { if (document.activeElement !== gURLBar.inputField) { locationBar.style.display = "none"; URLBarInput.style.display = ""; gURLBar._urlTooltip && gURLBar._hideURLTooltip(); } }, false); URLBarInput.addEventListener("mouseover", function (event) { if (event.ctrlKey || document.activeElement === gURLBar.inputField) { return; } locationBar.parentNode.removeChild(locationBar); locationBar = URLBarInput.parentNode.appendChild(document.createElement("hbox")); locationBar.style.overflow = "hidden"; locationBar.style.width = URLBarInput.clientWidth + "px"; gURLBar.value.split("?")[0].split("/").map(function (value, index, arr) { return index + 1 === arr.length ? (gURLBar.value.split("?")[1] ? (value + "?" + gURLBar.value.split("?")[1]) : value) : value; }).map(function (value, index, arr) { var sec = locationBar.appendChild(document.createElement("label")); //sec.style.margin = "5px"; sec.style.margin = "5px 0 0 0"; sec.value = value; if (index < arr.length - 1) sec.value = value.replace(/[^\/]$/, "$&/"); index === 0 && (sec.style.marginLeft = "1px"); if (index === 0 && /:\/$/.test(sec.value)) { sec.value += "/"; } else { sec.onmouseover = function () { this.style.textDecoration = "underline"; this.style.color = "blue"; this.style.fontWeight = "bold"; this.style.cursor = "pointer"; //this.setAttribute("style", "font-weight: bold;"); } sec.onmouseout = function () { this.style.textDecoration = ""; } sec.onclick = function (event) { if (event.button === 0) { var vert=URLBarInput.value.split(this.value)[0] + this.value; getBrowser (). loadURI(vert, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }); //loadURI(URLBarInput.value.split(this.value)[0] + this.value); while (this.nextSibling) { this.nextSibling.parentNode.removeChild(this.nextSibling); } event.stopPropagation(); } } URLBarInput.style.display = "none"; locationBar.style.display = ""; } }) }, false); })(); Najlus пишет
Опять же старая кнопка Menuitem hider - правой кнопкой на пункте меню скрывает пункты контекстные меню (скрытые пункты прописываются в инициализации) скрытый текст Выделить код Код:/*Initialization Code*/ var ids = [ "#context-sendlinktodevice", /* Отправить ссылку на устройство*/ "#AMD-browse-goHome", /* Домашняя страница*/ "#context-sendpagetodevice", /* Отправить страницу на устройство*/ "#context-navigation", /* панель навигации*/ "#context-pocket", /* Сохранить страницу в Pocket*/ "#context-savelinktopocket", /* Сохранить ссылку в Pocket*/ ]//menuitem hider mark var button = this; var currentImage = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYX+hYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYX+hYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7f//////////jY2N////////////////////////////////////////////////////////////hYWF7YWFhe3//////////42Njf///////////////////////////////////////////////////////////4WFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXthYWF7YWFhe2FhYXtAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ=="; var imgFalse = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHz/fHx8/3t7e/97e3v/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/6Gkyf9HWOP/OEas//f3+v////////////////////////////////////////////Ly8///////fHx8/3x8fP9ueNT/Rlzs/x810P+/xe///////////////////////////////////////9fX3f+Mjbb//////3x8fP98fHz/V2HM/0FZ5P8xRt3/P02w/3d6jv6FhYX+hYWF/oWFhf6FhYX+hYWF/oWFhf5HSZH/T1B6/oWFhf58fHz/fHx8/5me8v80TN3/HDfd/ztIu//IzfL///////////////////////////+6u87/NULL/+Dg5P//////fHx8/3x8fP/o6PX/VGPS/xYy2P8aMMv/ra3A///////////////////////o6Or/NUjT/3uCvP///////////3x8fP98fHz/hYWF/nd4k/4xRtb/Ei7a/yQwpv9ycXT+hYWF/oWFhf6AgYP+OUOb/yE1yf95eXz+hYWF/oWFhf58fHz/fHx8////////////e36v/x820P8QLd7/VVur//T09P//////cXjC/xs27v+qrMj/////////////////fHx8/3x8fP///////////42Njf+7vfX/ITjT/x444P9dZLD/YWq3/xUy8/9lb8P//////////////////////3x8fP98fHz/hYWF/oWFhf6FhYX+hYWF/nl7oP4aLbj/DSbT/w4r4f8sOrP/e3uC/oWFhf6FhYX+hYWF/oWFhf58fHz/fHx8////////////jY2N//T09v+ho9X/FCzS/wki2/8DHNP/OknJ/8fN9v//////////////////////fHx8/3x8fP///////////2xtf/9dZ7//GDPk/wcn6/8vQtH/ZnDX/wke0f8+S7n/ys7n/////////////////3x8fP98fHz/dXV7/mNolP9reeT/VGr5/0BX9f8yRMn/cHGG/oWFhf5rb7L+KkPy/zE8of9mZnT+hYWF/oWFhf58fHz/e3t8/2Vy0P+JmPj/h5b6/3qK9v9/idz/3Nzl/////////////////9na+P+Ik/j/Y27S/5CSrP/y8vP/fHx8/3x8fP+WpPn/coPp/4OP3/+ws9f/9vb6////////////////////////////+fn9/8XH+P+Mk+//ZWmq/3t7e/98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/fHx8/3x8fP98fHz/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ=="; var s = 'custombutton.menuitem_hider.active'; cbu.isPref(s, true); var ios = Cc['@mozilla.org/network/io-service;1'].getService(Ci.nsIIOService); var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); var us = sss.USER_SHEET; function makeCssURI() { cssStr = ids + " { display: none !important }" return ios.newURI("data:text/css," + encodeURIComponent(cssStr), null, null); } var currCssURI = makeCssURI(); if ( cbu.getPrefs(s) ) regSheet( currCssURI, true ); function regSheet(newCssURI, reg) { if (sss.sheetRegistered(currCssURI, us)) sss.unregisterSheet(currCssURI, us); if (!reg) return; if (!sss.sheetRegistered(newCssURI, us)) sss.loadAndRegisterSheet(newCssURI, us); currCssURI = newCssURI; } function onClick(e) { if (e.button != 1) return; var target = e.target; var nn = target.nodeName; if (nn != "menuitem" && nn != "menu" && nn != "menuseparator") return; var id = target.id; if (!id) return; var label = target.label || target.nodeName; var link = custombuttons.makeButtonLink("edit", button.id); var param = custombuttons.cbService.getButtonParameters(link); param = param.wrappedJSObject || param; var init = param.initCode; var index = init.indexOf("\n]//menuitem hider mark"); var part1 = init.substring(0, index); var part2 = init.substring(index, init.length); param.initCode = part1 + '"#' + id + '", /* ' + label + '\*\/' + '\n' + part2; custombuttons.cbService.installButton(param); } addEventListener("click", onClick, false); this.onDestroy = function(reason) { removeEventListener("click", onClick, false); regSheet(currCssURI, false); if (reason == "delete") cbu.clearPrefs(s); } button.onclick = function(e) { if (e.button) return; cbu.setPrefs(s, !cbu.getPrefs(s)); button.image = cbu.getPrefs(s) ? currentImage : imgFalse; cbu.getPrefs(s) ? button.init() : button.onDestroy(); } button.image = cbu.getPrefs(s) ? currentImage : imgFalse; if ( !cbu.getPrefs(s) ) button.onDestroy(); Najlus пишет
Опять же не такой уж большой функционал, но кнопка с простой функцией - добавлять в меню кнопки пункты из скопированного текста (можно в справке самому править элементы меню) скрытый текст Выделить код Код:/*Initialization Code*/ this.type != "menu" ? this.type = "menu" : (popup => { var inserter = { get docShell() { delete this.docShell; return this.docShell = "docShell" in document && document.docShell instanceof Ci.nsIDocShell ? document.docShell : window.docShell; }, get insertText() { delete this.insertText; return this.insertText = text => { if (!this.docShell.isCommandEnabled("cmd_insertText")) return; var params = "createCommandParams" in Components.utils ? Cu.createCommandParams() : Components.classes["@mozilla.org/embedcomp/command-params;1"] .createInstance(Components.interfaces.nsICommandParams); params.setStringValue("state_data", text); this.docShell.doCommandWithParams("cmd_insertText", params); } }, insert(text) { var br = document.activeElement; !br || br.localName != "browser" || !br.isRemoteBrowser ? this.insertText(text) : br.messageManager.loadFrameScript( `data:,(${this.insertText})${encodeURIComponent(text.toSource())}` , false, true); } }; this.onmousedown = e => { if (e.button) return; this.onmousedown = null; var data, save = () => { var link = custombuttons.makeButtonLink("update", _id); var params = custombuttons.cbService.getButtonParameters(link).wrappedJSObject; params.help = JSON.stringify(data, null, "\t"); custombuttons.cbService.installButton(params.wrappedJSObject = params); } popup.setAttribute("context", ""); popup.setAttribute("onpopupshowing", "firstChild.disabled = !gClipboard.read();"); popup.add = () => save(data.push(gClipboard.read())); var menuitem = popup.appendChild(document.createElement("menuitem")); menuitem.setAttribute("label", "Добавить из буфера"); menuitem.setAttribute("oncommand", "parentNode.add();"); if (!(data = JSON.parse(this.Help || "[]")).length) return; popup.insert = ind => inserter.insert(data[ind]); popup.delete = ind => save(data.splice(ind, 1)); var df = document.createDocumentFragment(); df.append(document.createElement("menuseparator")); var menugroup = df.appendChild(document.createElement("menugroup")); menugroup.setAttribute("oncommand", "parentNode.insert(event.target.index);"); menugroup.setAttribute("orient", "vertical"); menugroup.setAttribute("context", "_child"); var context = menugroup .appendChild(document.createElement("menupopup")) .appendChild(document.createElement("menuitem")); context.setAttribute("label", "Удалить элемент?"); context.setAttribute("oncommand", "event.stopPropagation(); menupopup.delete(popupNode.index);"); context.menupopup = popup; data.forEach((text, ind) => { var menuitem = menugroup.appendChild(document.createElement("menuitem")); menuitem.setAttribute("label", text.trimLeft().replace(/\s+/g, " ").slice(0, 70)); menuitem.index = ind; }); popup.append(df); } })(this.appendChild(document.createElement("menupopup"))); |
Wave > 24-02-2019 13:03:50 |
okkamas_knife пишет
А ещё проще завести старый браузер и не ставить нового. Меня, если честно, квантум просто бесит тем, что помимо всех прочих его проблем ему для нормальной работы нужно доставлять питон, ноду, автохоткей, жопу с ручкой и прочее-прочее-прочее. С новой системой безопасности они вместе с водой выплеснули ребёнка. P.s. Посмотрел свежую статистику браузеров. У фаерфокса уже осталось меньше десяти процентов. Как долго он ещё протянет, прежде чем перейти на хромиум? |
okkamas_knife > 24-02-2019 14:07:16 |
ну я собственно про это и написал в первом сообщении, что проще юзать старый а если не хочется возни с допиливанием завести для тех нескольких кривосайтов портабельную версию нового. |