Viatcheslav
ScrollAnywhere – Add-ons for Firefox
Drag To Scroll – Add-ons for Firefox
Если что. . .
Отсутствует
drage2
var path1 = 'file:///D:/Proxy.pac' var path2 = 'file:///C:/Proxy.pac'; var s = 'network.proxy.autoconfig_url'; this._handleClick =()=> { var path = getPath() == path1 ? path2 : path1; cbu.setPrefs(s, convertFromUnicode("UTF-8", path)); }; 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(); }; function getPath() { try { return Services.prefs.getComplexValue(s, Ci.nsISupportsString).data } catch(e) { return path1 }; }; function toggleImage() { var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon"); icon.src = getPath() == path1 ? self.image : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC'; }; toggleImage(); gPrefService.addObserver(s, toggleImage, false); addDestructor(()=> gPrefService.removeObserver(s, toggleImage));
Отсутствует
О, спасибо Мне казалось, что кроме Yet Another Smooth Scrolling ничего достойного нет
Отсутствует
так же можно эту кнопку заюзать №148
----
Нашел отличную кнопку, но как обычно и бывает, она на половину хороша делает то, но не там. TabSelect переключает вкладки. Попробовал этот кусок кода
посадить на клик по вкладке(из других примеров в теме [CB]Tab Clicking Options но никак.
Сама кнопка такая, отдельная на панель. Запишу тут, ибо сайт чета не открываеццо:
"use strict" this.onclick = function(e) { switch (e.button) { case 0: var tabs = gBrowser.visibleTabs || gBrowser.tabs, recentlyUsedTabs = Array.sort(tabs, function(tab1, tab2) { return tab2.lastAccessed - tab1.lastAccessed }), tab = tabs[recentlyUsedTabs.indexOf(gBrowser.selectedTab) + 1] || null; if (tab) gBrowser.selectedTab = tab; break; case 1: var tabs = gBrowser.tabContainer.childNodes; for (var i = 0, cnt = 0; i < tabs.length; i++) if (tabs[i].hasAttribute("pinned")) cnt++; gBrowser.selectedTab = tabs[cnt]; break; case 2: if (e.shiftKey || e.ctrlKey) { this.oncontextmenu = function() { return true; } return; } this.oncontextmenu = function() { return false; } var tabs = gBrowser.tabContainer.childNodes, last = tabs.length - 1; gBrowser.selectedTab = tabs[last]; } var sTab = gBrowser.selectedTab; sTab.scrollIntoView(true); } this.tooltipText = this.label + "\n\ \u2022 Left-click > Last Selected Tab\n\ \u2022 Middle-click > First Unpinned Tab\n\ \u2022 Right-click > Last Tab\n\ \u2022 Shift/Ctrl + Right-click > Context Menu"; // Button Name: Tab Select // Created: Feb 8, 2017 // Updated: July 24, 2017 shift or ctrl + right-click for custombuttons-contextpopup // Author: Sonny aka srazzano // Homepage: http://custombuttons.sourceforge.net/forum/viewtopic.php?f=4&t=6420 // Description: See homepage // Support: srazzano@gmail.com
// Клик по активной вкладке - переход на предыд. посещенную... неробит this.onDestroy = function() { removeEventListener("click", TabSwitch, false, gBrowser.mTabContainer); }; function TabSwitch(e) { switch (e.button) { case 0: var tabs = gBrowser.visibleTabs || gBrowser.tabs, recentlyUsedTabs = Array.sort(tabs, function(tab1, tab2) { return tab2.lastAccessed - tab1.lastAccessed }), tab = tabs[recentlyUsedTabs.indexOf(gBrowser.selectedTab) + 1] || null; if (e.target == gBrowser.mCurrentTab ) gBrowser.selectedTab = tab; break; } }; addEventListener("click", TabSwitch, false, gBrowser.mTabContainer);
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
клик по активной вкладке - переход на пред. активную. Создатель кнопки написал этот код, который вычисляет пред.активную вкладку и переходит на нее, но сделал это в кнопке. А я хочу это все чтоб было на активной вкладке.
в оригинале это отдельная кнопка на которую надо жмакать, а я хочу повесить это на вкладку(активную) чтоб клик (LeftMouseClick) по активной(выбранной) вкладке делал тоже самое что и кнопка. CTRL+TAB, TabFlipping или как там еще это назвать можно... из Оперы поведение. Чел сделал, но не так как хотелось
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
клик по активной вкладке - переход на пред. активную. Создатель кнопки написал этот код, который вычисляет пред.активную вкладку и переходит на нее, но сделал это в кнопке. А я хочу это все чтоб было на активной вкладке.
А если переделать Активировать вкладку наведением курсора немного над вкладкой или:
// ЛКМ + ПКМ на текущий таб, переместить таб в новую группу, от 06.12.2014. ................................ function moveTabToNewGroup(e) { if ( e.button == 2 && this.leftButtonDown ) { // временно блокируем контекстное меню вкладки addEventListener("popupshowing", function f(e) { e.preventDefault(); removeEventListener( e.type, f ); }); // переместить текущий таб в новую группу setTimeout(function() { var tab = e.target; if ( gBrowser.visibleTabs.length == 1 ) return; TabView.moveTabTo( tab, null ); window.gBrowser.selectedTab = tab; }, 50 ); } if ( e.button == 0 ) { this.leftButtonDown = true; // сбросить переменную и обработчики function c(e) { this.leftButtonDown = false; removeEventListener( e.type, c ); }; addEventListener("mouseup", c ); addEventListener("mousemove", c ); } }; addEventListener("mousedown", moveTabToNewGroup, true, gBrowser.tabContainer);
или:
// Двойной левый клик на табе закрывает страницу, двойной правый имитирует нажатие на звёздочку в адресной строке .................. function closeAddBookTab(e) { if ( e.target.localName != "tab" ) return; e.preventDefault(); e.stopPropagation(); if ( e.button == 0 ) { gBrowser.removeCurrentTab() }; if ( e.button == 2 ) { PlacesCommandHook.bookmarkPage( e.target.linkedBrowser, undefined, true ); setTimeout(function() document.getElementById("tabContextMenu").hidePopup(), 0); var panel = document.getElementById("editBookmarkPanel"); addEventListener("popupshown", function() { removeEventListener("popupshown", arguments.callee, true, panel ); panel.moveTo( e.screenX, e.screenY ); // переместить рядом с вкладкой document.getElementById('editBMPanel_foldersExpander').click(); // показать все папки закладок }, true, panel ); } }; addEventListener("dblclick", closeAddBookTab, false, gBrowser.mTabContainer);
Добавлено 19-01-2018 19:21:49
или:
// Настройка длинного клика мыши для вкладки .............. addEventListener("mousedown", e=> { var targ = e.target; if ( e.button || targ.localName !== "tab" ) return; targ.onclick =()=> clearTimeout(targ.timer); targ.timer = setTimeout(()=> { gBrowser.removeTabsToTheEndFrom(gBrowser.mCurrentTab); }, 450); }, true, gBrowser.mTabContainer);
Отредактировано bunda1 (19-01-2018 19:45:29)
Отсутствует
клик по активной вкладке - переход на пред. активную. Создатель кнопки написал этот код, который вычисляет пред.активную вкладку и переходит на нее, но сделал это в кнопке. А я хочу это все чтоб было на активной вкладке.в оригинале это отдельная кнопка на которую надо жмакать, а я хочу повесить это на вкладку(активную) чтоб клик (LeftMouseClick) по активной(выбранной) вкладке делал тоже самое что и кнопка. CTRL+TAB, TabFlipping или как там еще это назвать можно... из Оперы поведение. Чел сделал, но не так как хотелось
Надо с другой стороны зайти. ЛКМ по активной вкладке "нажимает" CTRL+TAB
Отсутствует
Кнопка "увеличить изображение" аж 2014г. Работает,но не с мультипроцессом...FF58 - можно и выкл. мульти, так с запуском тормоза. Кнопку саму нельзя рихтануть?
Жалко.Уделал эту 58 , а только эту кнопку - никак....
Да, есть такая проблема. Перестал работать triggerNode в:
// отслеживать открытие контекстного меню на странице .... addEventListener("popupshowing", function(e) { menuitem.hidden = !gContextMenu.onImage; // скрывать пункт если не контекстное меню изображений if ( !gContextMenu.onImage ) return; // получить координаты и размеры изображения var trg = e.target.triggerNode; g.win = trg.ownerDocument.defaultView; g.rect = trg.getBoundingClientRect(); }, true, contextMenu);
Может кто подскажет чем его заменить?
Отсутствует
bunda1
отслеживать открытие контекстного меню на странице
Это проблема, но ...В 57 мульти не нужен и кнопка работает. А в 58 финал это уже не актуально, кнопка "путь к proxy.pac" не будет работать в 58 никогда...
Там итак косяков навалом, и это ещё.Кстати, этот мультирежим не дает скачать видео кое-где,какого,а? http://kinokrad.co/ IDM - молчит пока мульти...
Отсутствует
Кстати, этот мультирежим не дает скачать видео кое-где,какого,а? http://kinokrad.co/ IDM - молчит пока мульти...
Да, к сожалению мультирежим ломает многие Сustom Buttons кнопки и коды
Отсутствует
в любом меню в пункте "Веб - разработка" удваивается количество пунктов начиная от Панели разработчика до Других инструментов. Или может это только у меня ?
Да, действительно, пункты множатся.
Попытаюсь избежать, но не уверен.
Двойное нажатие ПКМ не вызывает меню СВ, потому что в Сustom Buttons что-то сломано и иеперь в всех кнопках меню нельзя вызвать двойным нажатием ПКМ.
Двойное нажатие ПКМ не вызывает меню СВ потому,
что в коде кнопки на это есть прямой запрет. А вот так, например, вызывает.
// Настройка функций кликов мыши для кнопки ............... /* this.onclick =e=> { if ( e.button == 0 ) GrabScroll.toggle(); if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { e.preventDefault(); menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft"); } }; this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() }; */ this.onclick = e => e.button || GrabScroll.toggle(); this.oncontextmenu = e => e.detail == 2 && !menuPopup.hidePopup() || e.ctrlKey || !!menuPopup.openPopup(this, "after_start");
хочу повесить это на вкладку(активную) чтоб клик (LeftMouseClick) по активной(выбранной) вкладке делал тоже самое что и кнопка
Сначала пишем простой набросок,
затем смотрим что может пойти не так.
((trg, sortFunc, flag) => { addEventListener("mousedown", e => flag = e.target != gBrowser.selectedTab, true, trg); addEventListener("click", e => { if ( flag || e.button || e.ctrlKey || e.shiftKey || e.altKey || e.detail != 1 || ~~"что-то ещё" ) return; var tabs = [...(gBrowser.visibleTabs || gBrowser.tabs)]; var recentlyUsedTabs = tabs.sort(sortFunc); var tab = tabs[recentlyUsedTabs.indexOf(e.target) + 1]; if (tab) gBrowser.selectedTab = tab; }, false, trg); })(gBrowser.tabContainer, (tab1, tab2) => tab2.lastAccessed - tab1.lastAccessed);
Отредактировано Dumby (20-01-2018 05:08:50)
Отсутствует
Двойное нажатие ПКМ не вызывает меню СВ потому,
что в коде кнопки на это есть прямой запрет. А вот так, например, вызывает.
Нет, раньше на старых версиях Firefox двойное ПКМ вызывала СВ меню даже если на одиночный ПКМ уже висело меню настроек кнопки. А за код спасибо :)
Отсутствует
Dumby
Да, действительно, пункты множатся.
Попытаюсь избежать, но не уверен.
теперь не множатся. Все отлично.
Отсутствует
В главном меню есть пункт Изменить..., который вызывает открытие вкладки Настройка FireFox (аналогично нажатию ПКМ по панели меню -> Изменить). Можно ли эту команду вынести в виде кнопки на панель меню , или создать кнопку для Custom Buttons такого же назначения? Частенько приходиться настраивать внешний вид (удалять/добавлять/перемещать кнопки), и было бы удобно держать эту команду поближе. Помогите, пожалуйста. Прошу прощение за примитивную просьбу Спасибо
Отсутствует
Viatcheslav
Отредактировано unter_officer (20-01-2018 14:58:44)
«The Truth Is Out There»
Отсутствует
Dumby Попробовал добавить в твою кнопку Консоль браузера открытие в bottom панели, посмотри пожалуйста, не испортил ли я твой код. По твоему методу добавления панели, у меня как то не вышло.
/*Initialization Code*/ ({ title: "Консоль браузера", icon: "chrome://devtools/skin/images/tool-webconsole.svg", url: "chrome://devtools/content/webconsole/webconsole.xul", init() { var trg = document.getElementById("browser"); trg && addEventListener("DOMContentLoaded", this, false, trg); var attrs = { sidebartitle: this.title, sidebarurl: this.url, type: "checkbox", group: "sidebar", checked: SidebarUI.isOpen && SidebarUI.browser.getAttribute("src") == this.url }; var broadcaster = this.element("broadcaster", Object.assign({ id: "viewBrowserConsoleSidebar" }, attrs), document.getElementById("mainBroadcasterSet")); Object.assign(attrs, { autoCheck: "false", label: this.title, observes: broadcaster.id, oncommand: `SidebarUI.toggle("${broadcaster.id}");` }); var btn = this.element("toolbarbutton", Object.assign({ id: "sidebar-switcher-browserconsole", class: "subviewbutton subviewbutton-iconic" }, attrs)); this.element("observes", {element: broadcaster.id, attribute: "checked"}, btn); document.querySelector("#sidebarMenu-popup > toolbarseparator").before(btn); var menuitem = this.element("menuitem", Object.assign({ id: "menu_browserConsoleSidebar" }, attrs), document.getElementById("viewSidebarMenu")); var css = `\ #${btn.id} > .toolbarbutton-icon, #sidebar-box[sidebarcommand="${broadcaster.id}"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon { list-style-image: url(${this.icon}); -moz-context-properties: fill; fill: currentColor; opacity: 0.8; } #TabsToolbar[brighttext] .tabbrowser-tab:not([visuallyselected=true]) .tab-icon-image[src="${this.icon}"] { filter: url("chrome://devtools/skin/images/filters.svg#icon-normal-dark"); }`; var dwu = QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); var str = "data:text/css," + encodeURIComponent(css), type = dwu.AGENT_SHEET; dwu.loadSheetUsingURIString(str, type); addDestructor(() => { for(var node of [broadcaster, btn, menuitem]) node.remove(); dwu.removeSheetUsingURIString(str, type); }); function $(aId) { return document.getElementById(aId); } gCBBrowserConsole= this; this.panel = false; this.togglePanel = function() { this.panel = !this.panel; $("BrowserConsole-splitter").hidden = !this.panel; $("BrowserConsole-panel").hidden = !this.panel; $("BrowserConsole-iframe").setAttribute("src", this.panel ? this.url : ""); } function makeXML(aXMLString) { return (new DOMParser).parseFromString(aXMLString, "application/xml") .documentElement; } function $xml(aNode, aId, aXML) { var node = $(aId); node && node.parentNode.removeChild(node); aNode && aNode.appendChild(makeXML(aXML)) } $xml($("appcontent"), "BrowserConsole-splitter", '<splitter xmlns="' + xulns + '" id="BrowserConsole-splitter"' + ' orient="vertical" hidden="true">' + '<grippy oncommand="this.parentNode.nextSibling.collapsed =' + ' !this.parentNode.nextSibling.collapsed;"/></splitter>'); $xml($("appcontent"), "BrowserConsole-panel", '<vbox xmlns="' + xulns + '" id="BrowserConsole-panel"' + ' height="300" hidden="true">' + '<toolbox><toolbar align="center">' + '<label value="Консоль браузера" flex="1" crop="end"/>' + '<toolbarbutton class="tabs-closebutton"' + ' image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/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="' + ' oncommand="gCBBrowserConsole.togglePanel();"/>' + '</toolbar></toolbox>' + '<iframe id="BrowserConsole-iframe" src="" flex="1"/>' + '</vbox>'); self.onclick = e => { //if (e.button == 2) return; //if (!e.button) return SidebarUI.toggle(broadcaster.id); if (e.button == 0) return SidebarUI.toggle(broadcaster.id); if (e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ){ e.preventDefault(); this.togglePanel(); } var st = gBrowser.selectedTab, tab; // if (!e.ctrlKey) tab = gBrowser.visibleTabs.find( if (e.button == 1){ tab = gBrowser.visibleTabs.find( tab => tab.linkedBrowser.currentURI.spec == this.url ) if (tab == st) return; if (!tab) tab = gBrowser.addTab(this.url); gBrowser.moveTabTo(tab, st._tPos + 1); gBrowser.selectedTab = tab;} } if (gBrowser.currentURI.spec == this.url) { var doc = gBrowser.selectedBrowser.contentDocument; if (!doc.querySelector("link")) this.handleEvent({target: doc}); } }, handleEvent({target: doc}) { if (!doc || Cu.isCrossProcessWrapper(doc)) return; var win = doc.defaultView, url = doc.documentURI; var inTab = !String(win).includes("ChromeWindow"); if (url == this.url) { if (inTab) { var link = doc.createElementNS(xhtmlns, "link"); link.setAttribute("rel", "shortcut icon"); link.setAttribute("href", this.icon); doc.documentElement.firstChild.before(link); } this.loader.Services.ww.wins.push(win); new this.loader.HUD_SERVICE().toggleBrowserConsole().then(bc => { if (!inTab) return; var dummy = {close() {}}; var parent = this.inIDOMUtils.getParentForNode(doc, true); if (parent && parent.id == "web-panels-browser") { SidebarUI._title.value = this.title; SidebarUI._icon.src = this.icon; dummy.close = () => SidebarUI._icon.removeAttribute("src"); } win.onbeforeunload = () => {bc.chromeWindow = dummy;} }, Cu.reportError); } else if ( inTab && url == "chrome://devtools/content/shared/widgets/VariablesView.xul" ) { var iframe = win.frameElement; if (!iframe || iframe.ownerDocument.documentURI != this.url) return; var listener = Services.els.getListenerInfoFor(iframe) .find(obj => obj.type == "load").listenerObject; iframe.removeEventListener("load", listener, true); win.addEventListener("load", () => listener({target: doc}), {once: true}); } }, get loader() { delete this.loader; var id = _id + "-browser-console"; var url = "resource://devtools/shared/Loader.jsm?" + id; var loader = {exports: {}}, nsvo = Cu.import(url, loader); addDestructor(reason => reason[5] == "e" && Cu.unload(url)); if (id in nsvo) return this.loader = nsvo[id]; Services.scriptloader.loadSubScript("resource://devtools/client/webconsole/hudservice.js", loader); var e = new CustomEvent("DOMContentLoaded", {bubbles: false}), ww = loader.Services.ww; loader.Services.ww = Cu.getGlobalForObject(nsvo).Object.create(ww, { wins: {value: []}, openWindow: {value: function() { var win = this.wins.shift(); setTimeout(() => win.dispatchEvent(e), 0); return win; }} }); Services.obs.removeObserver(loader.gDevToolsBrowser, "browser-delayed-startup-finished"); var func = nsvo.require("devtools/client/framework/browser-menus").removeMenus; for(var win of CustomizableUI.windows) func(win.document); return this.loader = nsvo[id] = loader; }, element(name, attrs, parent) { var node = document.createElement(name); for(var attr in attrs) node.setAttribute(attr, attrs[attr]); if (parent) parent.appendChild(node); return node; }, get inIDOMUtils() { delete this.inIDOMUtils; return this.inIDOMUtils = "inIDOMUtils" in Ci ? Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils) : InspectorUtils; } }).init(); this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() }; // Подсказка у кнопки............................................................................. this.tooltipText = "Консоль браузера" +"\n"+ "ЛКМ: В боковой панели" +"\n"+ "СКМ: В новой вкладке" +"\n"+ "ПКМ: В bottom панели" +"\n"+ "Ctrl+ПКМ: Стандартное меню ";
Отсутствует
var path1 = 'file:///D:/Proxy.pac' var path2 = 'file:///C:/Proxy.pac'; var s = 'network.proxy.autoconfig_url';
Шикарная кнопка...Черт бы побрал эту 58...Не работает...
Это кнопка Bunda1 - менять путь к проси -proxy.pac../ В 57-Ок!,в Seamonkey- кое-как, в 58- никак....
Можно как-то скреативить для 58? Или гиблое дело?
network.proxy.autoconfig_url строка file:///D:/Proxy.pac
file:///C:/Proxy.pac
Отредактировано drage2 (24-01-2018 14:34:27)
Отсутствует
Это кнопка Bunda1 - менять путь к проси -proxy.pac../ В 57-Ок!,в Seamonkey- кое-как, в 58- никак....
Можно как-то скреативить для 58? Или гиблое дело?
network.proxy.autoconfig_url строка file:///D:/Proxy.pac
file:///C:/Proxy.pac
var path1 = 'file:///D:/Proxy.pac' var path2 = 'file:///C:/йцукен.pac'; var s = 'network.proxy.autoconfig_url'; this._handleClick =()=> { var path = getPath() == path1 ? path2 : path1; cbu.setPrefs(s, convertFromUnicode("UTF-8", path)); }; 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(); }; function getPath() { try { return gPrefService.getStringPref(s, "") } catch(e) { return path1 }; }; function toggleImage() { var icon = self.ownerDocument.getAnonymousElementByAttribute(self, "class", "toolbarbutton-icon"); icon.src = getPath() == path1 ? self.image : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC'; }; toggleImage(); gPrefService.addObserver(s, toggleImage, false); addDestructor(()=> gPrefService.removeObserver(s, toggleImage));
Отсутствует
Скажите пожалуйста, кто может подправить
// Получить выделенный текст из страницы или 'false' .............. function getSelect() { var el = document.commandDispatcher.focusedElement; try { return el.value.substring(el.selectionStart, el.selectionEnd) } catch(e) {}; var sel = document.commandDispatcher.focusedWindow.getSelection(); return (sel == '') ? false : sel.toString().replace(/^\s+|\s+$/g,"").replace(/\u000A/g, "\u000D\u000A").replace(/\u000D\u000D\u000A/g, "\u000D\u000A"); };
почему то возвращает все время 'false'
Отредактировано Andrey_Krropotkin (26-01-2018 09:19:24)
Отсутствует
почему то возвращает все время 'false'
просто со страницы, то так
Добавлено 26-01-2018 00:38:51
А вообще, есть готовая функции, вродеб за авторством bunda1 , навроде универсальной:
// получаем выделенный текст function getSelect() { var sel = document.commandDispatcher.focusedWindow.getSelection(); // из страницы if ( sel.isCollapsed ) { var el = document.commandDispatcher.focusedElement; // из текстового поля if ( el && el.textLength ) sel = el.value.substring(el.selectionStart, el.selectionEnd); } if ( sel.anchorNode && sel.anchorNode.parentNode.tagName == 'PRE' ) { // из 'PRE' var sel = sel.focusNode.data.substring(sel.anchorOffset, sel.focusOffset); } if ( sel == '') { // если выделенного текста нет return; } return sel; // if (sel) gClipboard.write(sel); }; alert(getSelect());
Отредактировано mokujin (26-01-2018 00:38:51)
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
mokujin на 57 работало, а на 58 не работает и этот вариант
Отсутствует
bunda1
Круто....Не постоје речи! Заработало!
Шутку с "var path2 = 'file:///Cйцукен.pac';" - заценил !
Хвала, брате! Еще бы " увеличить изображение" в мультипроцессе и все .... А, так пришлось кнопку лепить "browser.tabs.remote.autostart" , и перезапуск нужен, что ни есть гуд!
Отредактировано drage2 (26-01-2018 12:26:34)
Отсутствует