difabor там чуть посложней будет, чтобы получить линки в некую переменную - links, надо скорей всего формировать GET запрос страницы, получить ответ и вставить, примерно как перевод в окне.
А как это сделать?
Допустим, я хочу получить линки от https://lenta.ru/, находясь на другой странице, напр. на этой странице форума.
Что значит "вставить, примерно как перевод в окне"?
Отредактировано difabor (11-01-2020 17:08:20)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
на 72 не определяется селектор
Ну да, нету больше никаких селекторов,
всё окончательно переделали под Fission.
Теперь примерно как-то так, наверно
(popup => addEventListener("popupshowing", { handleEvent(e) { if (this.shouldHide) return; var menuitem = document.createXULElement("menuitem"); menuitem.id = "content-baseItem"; menuitem.className = "menuitem-iconic"; menuitem.setAttribute("oncommand", "copyImageAsBase64()"); menuitem.setAttribute("label", "Запомнить изображение как base64"); menuitem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAQ/wCAEf8AgA//AIAR/wCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgBX/AIAVAAAAAAAAAAD/AIAo/wCA//8AgP//AID//wCA//8AgP//AIAoAAAAAAAAAAAAAAAAAAAAAP8AgBL/AID//wCA//8AgA3/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgBAAAAAAAAAAAAAAAAD/AIAR/wCA//8AgP//AIAK/wCACv8AgP//AID//wCAIf8AgAX/AIAh/wCA//8AgP//AIAQAAAAAAAAAAAAAAAA/wCACv8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAUAAAAA/wCABf8AgP//AID//wCACgAAAAD/AIAQ/wCADP8AgCH/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCABf8AgCH/AID//wCA//8AgAv/AIAh/wCA//8AgP//AID//wCA//8AgP//AIAH/wCAB/8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AIAg/wCA//8AgP//AID//wCA//8AgP//AID//wCAB/8AgAf/AID//wCA//8AgP//AID//wCA//8AgP//AIAh/wCAC/8AgP//AID//wCAHP8AgBz/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCACf8AgA7/AIAMAAAAAP8AgAj/AID//wCA//8AgAP/AIAD/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCABQAAAAAAAAAA/wCADf8AgAr/AIAL/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCAB/8AgAr/AID//wCA//8AgCH/AIAH/wCAJf8AgP//AID//wCAI/8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAf/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgCT/AID//wCA//8AgAr/AIAK/wCA//8AgP//AIAKAAAAAP8AgCj/AID//wCA//8AgP//AID//wCA//8AgCP/AIAM/wCA//8AgP//AIAN/wCADf8AgP//AID//wCADQAAAAAAAAAA/wCAEP8AgBH/AIAP/wCAEf8AgBAAAAAAAAAAAP8AgBT/AIAVAAAAAAAAAAD/AIAV/wCAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQcH5rEGA8KxBAHCsQQBwrEEIQKxBAACsQQAArEEAAKxBAQCsQQwArEEAAKxBAACsQYAArEHBmaxB//+sQQ=="); popup.append(menuitem); addDestructor(() => menuitem.remove()); menuitem.copyImageAsBase64 = () => { var {osPid} = gContextMenu.actor.manager.browsingContext.currentWindowGlobal; if (osPid == -1) osPid = Services.appinfo.processID; for(var ind = 0, len = Services.ppmm.childCount; ind < len; ind++) { var pmm = Services.ppmm.getChildAt(ind); if (pmm.osPid == osPid) break; } pmm.loadProcessScript("data:;charset=utf-8," + encodeURIComponent(this.code()), false); } this.handleEvent = () => menuitem.hidden = this.shouldHide; }, get shouldHide() { return !gContextMenu.onImage; }, code: () => `(targetIdentifier => { var image = ChromeUtils.import("resource://gre/modules/ContentDOMReference.jsm") .ContentDOMReference.resolve(targetIdentifier); var canvas = image.ownerDocument.createElementNS("${xhtmlns}", "canvas"); canvas.width = image.naturalWidth; canvas.height = image.naturalHeight; var ctx = canvas.getContext("2d"); ctx.drawImage(image, 0, 0); var base64 = canvas.toDataURL(); Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper) .copyStringToClipboard(base64, Ci.nsIClipboard.kGlobalClipboard); Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService) .showAlertNotification(base64, "${self.label}", "Запомнил изображение как base64"); })(${ JSON.stringify(gContextMenu.targetIdentifier) })` }, false, popup || 1))(document.getElementById("contentAreaContextMenu"));
Отсутствует
Вопрос к знатокам.
Все в курсе, что при заходе на сайты по HTTPS браузер проверяет сертификат и показывает разные иконки
Вопрос в следующем. Может кто-нибудь из знатаков набросать такой код:
Если HTTPS и сертификат действительный — alert("1").
Если HTTPS, сертификат действительный, но страница имеет смешанное содержимое — alert("2").
Если HTTPS и сайт добавлен пользователем в исключение — alert("3").
Если HTTPS и сертификат недействительный — alert("4").
«The Truth Is Out There»
Отсутствует
вот эту под 68ю
Перенёс ресайз с дерева на родительский vbox,
а то что-то со скроллбаром непонятки.
То есть, resizer будет чуть пониже.
((panel, css) => addEventListener("popupshowing", { pref: "CB.editBMPanel_folderTreeRow_WidthHeight", handleEvent(e) { css = encodeURIComponent(css.replace(/;/g, " !important;")); var args = ["data:text/css," + css, windowUtils.USER_SHEET]; windowUtils.loadSheetUsingURIString(...args); var row = this.row = document.getElementById("editBMPanel_folderTreeRow"); addEventListener("popuphidden", this, false, panel); addDestructor(reason => { windowUtils.removeSheetUsingURIString(...args); row.removeAttribute("width"); row.removeAttribute("height"); reason == "delete" && Services.prefs.clearUserPref(this.pref); }); this.handleEvent = e => e.target == panel && this[e.type](); this.popupshowing(); }, popupshowing() { var [width, height] = Services.prefs.getStringPref(this.pref, "332 184").split(" "); this.row.width = width; this.row.height = height; gEditItemOverlay.toggleFolderTreeVisibility(); }, popuphidden() { var {width, height} = this.row; Services.prefs.setStringPref(this.pref, width + " " + Math.max(184, height)); } }, false, panel || 1))(document.getElementById("editBookmarkPanel"), ` #editBookmarkPanel #editBMPanel_folderTreeRow { resize: both; overflow: hidden; min-width: 332px; } #editBookmarkPanel box.panel-header { padding: 0; border: none; } #editBookmarkPanel #editBookmarkPanelInfoArea { display: none; } #editBookmarkPanel #editBookmarkPanelRows { padding-top: 0; } #editBookmarkPanel #editBMPanel_keywordRow, #editBookmarkPanel #editBMPanel_locationRow { visibility: visible; } #editBookmarkPanel #editBMPanel_tagsRow > hbox, #editBookmarkPanel #editBMPanel_folderRow > hbox, #editBookmarkPanel #editBookmarkPanelRows > vbox:not([id*="folderTree"]):not([id*="tagsSelector"]) { display: flex; align-items: center; } #editBookmarkPanel #editBMPanel_tagsField, #editBookmarkPanel #editBMPanel_folderMenuList, #editBookmarkPanel #editBookmarkPanelRows > vbox > label:first-child + * { flex-grow: 1; } #editBookmarkPanel moz-input-box { width: 100%; } `);
Отсутствует
Dumby
Супер!
А по кнопке для запуска программы есть мысли?Вот это у меня на 54-й отлично работало,на 68-й - ноль реакции
startProcess("c:\\Program Files\\Proga\\proga.exe",[""]); function startProcess(path, args) { var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); file.initWithPath(path); if(file.exists()) { var process = Components.classes["@mozilla.org/process/util;1"] .createInstance(Components.interfaces.nsIProcess); process.init(file); process.run(false, args, args.length); } else custombuttons. alertBox ("Файл не найден", path); };
Отсутствует
VORON
Попробуй в коде кнопки заменить nsILocalFile на nsIFile.
«The Truth Is Out There»
Отсутствует
unter_officer
О,вот это подарок!
А что здесь поправить чтоб заработало?
/* Linkification Original script by Misha Splurov http://userscripts.org/scripts/show/67744 */ // (c) http://data.iana.org/TLD/tlds-alpha-by-domain.txt var domains = [ "ac", "ad", "ae", "aero", "af", "ag", "ai", "al", "am", "an", "ao", "aq", "ar", "arpa", "as", "asia", "at", "au", "aw", "ax", "az", "ba", "bb", "bd", "be", "bf", "bg", "bh", "bi", "biz", "bj", "bm", "bn", "bo", "br", "bs", "bt", "bv", "bw", "by", "bz", "ca", "cat", "cc", "cd", "cf", "cg", "ch", "ci", "ck", "cl", "cm", "cn", "co", "com", "coop", "cr", "cu", "cv", "cx", "cy", "cz", "de", "dj", "dk", "dm", "do", "dz", "ec", "edu", "ee", "eg", "er", "es", "et", "eu", "fi", "fj", "fk", "fm", "fo", "fr", "ga", "gb", "gd", "ge", "gf", "gg", "gh", "gi", "gl", "gm", "gn", "gov", "gp", "gq", "gr", "gs", "gt", "gu", "gw", "gy", "hk", "hm", "hn", "hr", "ht", "hu", "id", "ie", "il", "im", "in", "info", "int", "io", "iq", "ir", "is", "it", "je", "jm", "jo", "jobs", "jp", "ke", "kg", "kh", "ki", "km", "kn", "kp", "kr", "kw", "ky", "kz", "la", "lb", "lc", "li", "lk", "lr", "ls", "lt", "lu", "lv", "ly", "ma", "mc", "md", "me", "mg", "mh", "mil", "mk", "ml", "mm", "mn", "mo", "mobi", "mp", "mq", "mr", "ms", "mt", "mu", "museum", "mv", "mw", "mx", "my", "mz", "na", "name", "nc", "ne", "net", "nf", "ng", "ni", "nl", "no", "np", "nr", "nu", "nz", "om", "org", "pa", "pe", "pf", "pg", "ph", "pk", "pl", "pm", "pn", "pr", "pro", "ps", "pt", "pw", "py", "qa", "re", "ro", "rs", "ru", "rw", "sa", "sb", "sc", "sd", "se", "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sr", "st", "su", "sv", "sy", "sz", "tc", "td", "tel", "tf", "tg", "th", "tj", "tk", "tl", "tm", "tn", "to", "tp", "tr", "travel", "tt", "tv", "tw", "tz", "ua", "ug", "uk", "us", "uy", "uz", "va", "vc", "ve", "vg", "vi", "vn", "vu", "wf", "ws", "ye", "yt", "yu", "za", "zm", "zw" ]; // (c) http://yellow5.us/firefox/linkification/ var tagsForSkip = [ "a", "applet", "area", "embed", "frame", "frameset", "head", "iframe", "img", "map", "meta", "noscript", "object", "option", "param", "script", "select", "style", "textarea", "title" ]; var inArray = function(value, items) { for (var i = 0; items[i] && value != items[i]; i++); return value == items[i]; } var urlsRegExp = /(^|[\s()\[\]_:~+@*"'>])((?:https?|ftp|irc):\/\/)?([-a-z\d;:&=+$,%_.!~*'()]+@)?((?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:(www|irc|ftp)\.)?(?:(?:[a-z\d]|[a-z\d][a-z\d-]*[a-z\d])\.)+([a-z]{2,6}))(:\d+)?(\/(?:[-\w.!~*'()%:@&=+$,;\/]*[\w~*%@&=+$\/])?(?:\?(?:[-\w;\/?:@&=+$,.!~*'()%\[\]|]*[\w\/@&=+$~*%])?)?(?:#(?:[-\w;\/?:@&=+$,.!~*'()%]*[\w\/@&=+$~*%])?)?|\b)/i var linksCounter = 0; var current = content.document.body; while (current) { if (current.nodeName == "#text" && (match = current.nodeValue.match(urlsRegExp)) && inArray(match[6], domains)) { var url; if (match[3] && ! match[2] && ! match[5] && ! match[8] && (match[3].indexOf(":") == -1 || match[3].indexOf("mailto:") == 0)) { url = (match[3].indexOf("mailto:") == -1 ? "mailto:" : "") + match[3] + match[4]; } else { url = (match[2] ? match[2] : (! match[5] || match[5] == "www" ? "http" : match[5]) + "://") + (match[3] ? match[3] : "") + match[4] + (match[7] ? match[7] : "") + (match[8] ? match[8] : ""); } if (url) { var range = content.document.createRange(); range.setStart(current, match.index + match[1].length); range.setEnd(current, match.index + match[0].length); var a = content.document.createElement("a"); a.setAttribute("href", url); a.setAttribute("target", "_blank"); a.setAttribute("class", "linkified"); a.appendChild(range.extractContents()); range.insertNode(a); range.detach(); linksCounter++; } } if (current.tagName && !inArray(current.tagName.toLowerCase(), tagsForSkip) && current.firstChild) { current = current.firstChild; } else if (current.nextSibling) { current = current.nextSibling; } else { do { current = current.parentNode; } while (!current.nextSibling && current.parentNode); current = current.nextSibling; } } /* if (linksCounter > 0) { var style = content.document.createElement("style"); style.type = "text/css"; style.appendChild(content.document.createTextNode("a.linkified:before {content: "~"; color: #e00;}")); content.document.getElementsByTagName("head")[0].appendChild(style); } */
Отредактировано VORON (13-01-2020 15:28:11)
Отсутствует
Для 68й есть код-кнопка,для запуска программ?
Этот код точно работает в 68.4.1.
Отредактировано shadow_user (13-01-2020 17:01:31)
Отсутствует
А что здесь поправить
Попробуй так:
Содержимое вкладки Код перемести на вкладку Справка,
а во вкладке Код размести это
gBrowser.selectedBrowser.messageManager.loadFrameScript(this.fsURL || ( this.fsURL = `data:,(match => {\n${encodeURIComponent(this.Help)}\n})()` ), false);
Отсутствует
А где рабочую версию Custom Buttons взять?
Первый пост страницу назад.
Отсутствует
difabor вот нарыл -попробуй
Отсутствует
Первый пост страницу назад.
Спасибо. Я вчера это уже увидел. Установил customcustom_buttons-0.0.7.0.0.9-fx-paxmod.xpi Только вот ни одной работающей кнопки для 72.0.1 не нашёл. Кто-нибудь дайте плиз любую кнопку, которая точно работает на 72.0.1.
Отсутствует
Кто-нибудь дайте плиз любую кнопку, которая точно работает на 72.0.1.
Попробуйте эту: https://forum.mozilla-russia.org/viewto … 05#p772105
Win7
Отсутствует
difabor вот нарыл -попробуй
Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.
, где вместо forum.mozilla-russia.org/index.php - любой сайт, может поможет
Спасибо, Andrey_Krropotkin, попробовал.
Но этот сайт не даёт списка линков для гугла с поисковым запросом.
Но даже если бы давал, то что бы я с этим списком делал бы? Ведь для того, чтобы увидеть этот список, надо зайти на эту страницу.
Давайте я Вам расскажу, для чего мне это надо (может и Вам сгодится, если Вы любите использовать стили) и Вам станет яснее, что мне требуется.
1. Имеется масса стилей, которые используют фоновую картинку для красоты и всякие примочки, чтобы эта картинка не мешала читать текст.
Но какая бы картинка ни была красивой, она в конце концов надоедает...
2. Я написал скрипт - симбиоз javascript и css для сайта http://mignews.com/
По сути - это небольшая пришлёпка javascriptа к css.
Эта пришлёпка содержит список урл картинок, которые я подобрал, рандомальный выбор одной из них и подсовывание её в качестве фоновой картинки.
var image_list = ["https://vjoy.cc/wp-content/uploads/2019/10/samye-klassnye-oboi-na-telefon-4.jpg", "https://telegraf.com.ua/files/2018/07/krasota-prirody-na-fotografiyax-15_1.jpg", "https://vjoy.cc/wp-content/uploads/2019/10/2-7.jpg", "https://im0-tub-ru.yandex.net/i?id=d9aa27fb6d6b230a241c002ea867afeb-l&n=13", "https://avatars.mds.yandex.net/get-pdb/1880053/5ed75973-ac9c-4d58-9ba0-1509bcf1a2b9/s1200", "https://images.protopage.com/wallpaper/retina/autumn-landscape.jpg", "https://img2.akspic.ru/image/99500-priroda-vodopad-vodoem-vodotok-list-2880x1800.jpg"]; var rand = Date.now()%image_list.length; var imgmy = image_list[rand]; var css = '#content {margin-left: 150px !important}\n'+ '.header{max-height: 88px}\n' + '#zeroline{max-height: 86px}\n' + 'body {background: #eff;\n'+ ' background-image: url('+imgmy + ');background-size: contain}\n' + '.photomainnew, .mm-body,#doline {background-color: #ddd !important}\n'+ '.rumainnew{background-color: #eff}\n'+ '#inside{background-color: #eee;}\n'+ 'body > iframe {background-color: #eff}\n'+ '#unoline > .rumainnew {background-color: #eee !important;}\n'; let styleNode = document.createElement("style"); styleNode.appendChild(document.createTextNode(css)); (document.querySelector("head") || document.documentElement).appendChild(styleNode);
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Давайте я Вам расскажу, для чего мне это надо (
Удалено!
Замечание 3.3
Sergeys
...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation
Отсутствует
difabor пишетДавайте я Вам расскажу, для чего мне это надо (
Удалено!
А что Вас так возмутило? У каждого - свои вкусы и предпочтения. И причём здесь браузеры?
На мозилле у меня накрылись закладки. Причём - с концами: ни восстановить, ни импортировать я не могу - исчезли фолдеры верхнего уровня - Bookmarks Toolbar (Панель Закладок), Other Bookmarks (Другие Закладки) и т.д.
Полетела куча дополнений и т.п. Устанавливать мозиллу с чистого листа я не рискую пока. Поэтому я пока на Хроме.
Вот чем я порчу жизнь персонально Вам?
Вы, скажем, равнодушны к картинкам на подложке. Наверное получаете удовольствие от инфы на сайтах. На здоровье.
Я же Вам не навязываю свои вкусы.
Да, мне интересно разнообразие, привлекает новизна, в том числе и эстетическая. И что? Как это может ударить по Вам?
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Dumby
Нет кода bindigs вернуть? В 72 ...Или как иконки в menu вернуть? И вообще если что хорошее, кроме геммора в этой версии?
И еще "Ссылки клирикабельны" как бы иконку менять , setAttribute присвоить?
alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
alertsService.showAlertNotification("chrome://global/skin/icons/cpd_OK.png", "Links", "ССылки клирикабельны" );
setTimeout(()=> alertsService.closeAlert(), 2000);
Отредактировано solombala (16-01-2020 14:22:39)
Отсутствует
solombala, я тестил 74, так вот) там отвалиться больше...
Если нет навыков программирования, то вообще лучше не слезать с esr, или умолять чинить то или се...
У меня кроме скроллбара, еще что-то вышло из строя но так много поломанного что я уже решил забить.
Пользуюсь пока недобраузером, в плане поломок, а восстанавливать это геммор, если ток умолять а я устал темболее что игнор чую).
Ммм а тем более с 74, так там вообще половина всего вышла из строя, в том числе и стили некоторые.
Ну в вашем плане, если мало чего чинить можно наверно и попробывать. В моем та случае чинить реально много(скорее ненужного), тестил вашу сборку так там не так много что восстанавливать, так как все в основном изменено через omni.ja.
Отредактировано func4ptch4 (16-01-2020 14:19:39)
Отсутствует
Dumby
Перестала работать кнопка Активизировать вкладку наведением курсора
((lst, trg) => trg && addEventListener("mouseover", lst, false, trg))({id: 0, tab: null, handleEvent({target: tab}) {if (tab.matches("tab:not([selected])") && this.tab != tab) clearTimeout(this.id), this.id = setTimeout(this.onTimeout, 850, this.tab = tab, tab.boxObject.screenX);}, get onTimeout() {delete this.onTimeout; return this.onTimeout = (tab, x) => { if (tab.matches(":hover") && Math.abs(x - tab.boxObject.screenX) < 50) gBrowser.selectedTab = tab;this.tab = null;}}}, gBrowser.tabs[0].boxObject.parentBox);
Отсутствует
Dumby
Кириллица в латиницу, гор. кнопки как? Не того...
(keybUtils => { var btn = this; var listener = { handleEvent(e) { if(e.target != btn) return; e.preventDefault(); e.stopPropagation(); this.switch(); }, switch() { var br = document.activeElement; br && br.localName == "browser" && br.isRemoteBrowser ? br.messageManager.loadFrameScript(this.url, false) : this.keybUtils.switchSelKeybLayout(); }, get url() { delete this.url; return this.url = `data:;charset=utf-8,(${ encodeURIComponent(keybUtils) }).switchSelKeybLayout()`; }, get keybUtils() { delete this.keybUtils; var url = "data:;charset=utf-8,this.keybUtils = " + encodeURIComponent(keybUtils); Services.scriptloader.loadSubScript(url, this); this.keybUtils.button = btn; this.keybUtils.getFocusedElement = function(_subCall, _focusFixed) { if( !_focusFixed && "closeMenus" in window && document.commandDispatcher.focusedElement == this.button ) { closeMenus(this.button); setTimeout(function(_this) { _this.switchSelKeybLayout(_subCall, true); }, 0, this); return; } return document.commandDispatcher.focusedElement; } return this.keybUtils; } }; if(btn instanceof XULElement && addEventListener.length > 3) { addEventListener("command", listener, true, this.parentNode); } listener.switch(); })(`{ //== Options noSelBehavior: { // Shift+Home ctrlKey: false, altKey: false, shiftKey: true, metaKey: false, keyCode: KeyEvent.DOM_VK_HOME, charCode: 0 }, // 0 - do nothing // 1 - convert all text // Or use object like following to simulate "keypress" event: /* noSelBehavior: { // Ctrl+Shift+Left ctrlKey: true, altKey: false, shiftKey: true, metaKey: false, keyCode: KeyEvent.DOM_VK_LEFT, charCode: 0 } */ convTableForward: { // ru -> en "\\"": "@", ":": "^", ";": "$", "?": "&", ",": "?", "/": "|", ".": "/", "э": "'", "б": ",", "ю": ".", "Ж": ":", "ж": ";", "Б": "<", "Ю": ">", "Э": "\\"", "х": "[", "ъ": "]", "ё": "\`", "Х": "{", "Ъ": "}", "Ё": "~", "№": "#", "Ф": "A", "ф": "a", "И": "B", "и": "b", "С": "C", "с": "c", "В": "D", "в": "d", "У": "E", "у": "e", "А": "F", "а": "f", "П": "G", "п": "g", "Р": "H", "р": "h", "Ш": "I", "ш": "i", "О": "J", "о": "j", "Л": "K", "л": "k", "Д": "L", "д": "l", "Ь": "M", "ь": "m", "Т": "N", "т": "n", "Щ": "O", "щ": "o", "З": "P", "з": "p", "Й": "Q", "й": "q", "К": "R", "к": "r", "Ы": "S", "ы": "s", "Е": "T", "е": "t", "Г": "U", "г": "u", "М": "V", "м": "v", "Ц": "W", "ц": "w", "Ч": "X", "ч": "x", "Н": "Y", "н": "y", "Я": "Z", "я": "z", __proto__: null }, //== End of options get convTableBackward() { var ctb = { __proto__: null }; var ctf = this.convTableForward; for(var c in ctf) ctb[ctf[c]] = c; delete this.convTableBackward; return this.convTableBackward = ctb; }, inPrimaryLayout: function(s) { for(var i = 0, l = s.length; i < l; ++i) { var c = s.charAt(i); if(c in this.convTableForward) return true; if(c in this.convTableBackward) return false; } return false; }, switchKeybLayout: function(s, convTable) { var res = ""; for(var i = 0, l = s.length; i < l; ++i) { var c = s.charAt(i); res += c in convTable ? convTable[c] : c; } return res; }, getFocusedElement: function() { return Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager) .getFocusedElementForWindow(content, true, {}); }, switchSelKeybLayout: function(_subCall, _focusFixed) { var fe = this.getFocusedElement(_subCall, _focusFixed); if(!fe) return; if(fe instanceof HTMLInputElement || fe instanceof HTMLTextAreaElement) { var ta = fe; try { var val = ta.value; var sel = val.substring(ta.selectionStart, ta.selectionEnd); } catch(e) { // Non-text HTMLInputElement return; } if(!sel && val && this.noSelBehavior && !_subCall) { if(this.noSelBehavior == 1) { ta.selectionStart = 0; ta.selectionEnd = val.length; sel = val; } else { this.handleNoSel(ta); return; } } if(!sel) return; var res = this.switchKeybLayout( sel, this.inPrimaryLayout(sel) ? this.convTableForward : this.convTableBackward ); if(res != sel) this.insertText(ta, res); } else if(fe.contentEditable == "true") { var doc = fe.ownerDocument; var docURI = doc.documentURI; if( docURI.substr(0, 5) == "data:" && docURI.indexOf("chrome://browser/skin/devtools/") != -1 ) { //~ todo: seems like we only can use paste from clipboard here... return; } var sel = doc.defaultView.getSelection(); var rng = sel.rangeCount && sel.getRangeAt(0); var tmpNode; if(!rng || rng.collapsed) { if(!this.noSelBehavior || _subCall) return; if(this.noSelBehavior == 1) { var r = doc.createRange(); r.selectNodeContents(fe); sel.removeAllRanges(); sel.addRange(r); tmpNode = fe.cloneNode(true); } else { this.handleNoSel(fe); return; } } else { tmpNode = doc.createElementNS("http://www.w3.org/1999/xhtml", "div"); tmpNode.appendChild(rng.cloneContents()); } var orig = tmpNode.innerHTML; var convTable = this.inPrimaryLayout(tmpNode.textContent) ? this.convTableForward : this.convTableBackward; var _this = this; var parseChildNodes = function(node) { if(node instanceof Element) { var childNodes = node.childNodes; for(var i = childNodes.length - 1; i >= 0; --i) parseChildNodes(childNodes[i]); } else if(node.nodeType == node.TEXT_NODE) { var text = node.nodeValue; var newText = _this.switchKeybLayout(node.nodeValue, convTable); if(newText != text) node.parentNode.replaceChild(doc.createTextNode(newText), node); } } parseChildNodes(tmpNode); var res = tmpNode.innerHTML; if(res != orig) doc.execCommand("insertHTML", false, res); } }, handleNoSel: function(node) { this.select(node); this.switchSelKeybLayout(true); }, select: function(node) { var e = this.noSelBehavior; if(!e || typeof e != "object") return; var evt = node.ownerDocument.createEvent("KeyboardEvent"); evt.initKeyEvent( "keypress", true /*bubbles*/, true /*cancelable*/, node.ownerDocument.defaultView, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.keyCode, e.charCode ); node.dispatchEvent(evt); }, insertText: function(ta, text) { //var editor = ta.QueryInterface(Components.interfaces.nsIDOMNSEditableElement).editor var editor = ta.editor .QueryInterface(Components.interfaces.nsIPlaintextEditor); if(editor.flags & editor.eEditorReadonlyMask) return; var sTop = ta.scrollTop; var sHeight = ta.scrollHeight; var sLeft = ta.scrollLeft; // var sWidth = ta.scrollWidth; if(text) editor.insertText(text); else editor.deleteSelection(0, 0); ta.scrollTop = sTop + (ta.scrollHeight - sHeight); ta.scrollLeft = sLeft; // + (ta.scrollWidth - sWidth); } }`);
Отсутствует
Перестала работать кнопка Активизировать вкладку наведением курсора
Может так
((lst, trg) => trg && addEventListener("mouseover", lst, false, trg))({ id: 0, tab: null, handleEvent(e) { var tab = e.target.closest("tab:not([selected]"); if (tab && this.tab != tab) clearTimeout(this.id), this.id = setTimeout(this.onTimeout, 850, this.tab = tab, tab.screenX); }, get onTimeout() { delete this.onTimeout; return this.onTimeout = (tab, x) => { if (tab.matches(":hover") && Math.abs(x - tab.screenX) < 50) gBrowser.selectedTab = tab; this.tab = null; } } }, gBrowser.tabs[0].flattenedTreeParentNode);
Кириллица в латиницу, гор. кнопки как? Не того...
В смысле во вкладку Код положить, или ты о чём?
Bug 1524327 - reconsider MOZ_ALLOW_LEGACY_EXTENSIONS behavior
Предварительная рефлексия, набросок нового config.js
// try {(nsvo => { var o = Cu.getGlobalForObject(nsvo).Object, {freeze} = o, old; o.freeze = obj => { if (Components.stack.caller.filename != "resource://gre/modules/AppConstants.jsm") return freeze(obj); obj.MOZ_REQUIRE_SIGNING = false; if ((old = "MOZ_ALLOW_LEGACY_EXTENSIONS" in obj)) obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true, lockPref("extensions.legacy.enabled", true); else lockPref("extensions.experiments.enabled", true); return (o.freeze = freeze)(obj); } lockPref("xpinstall.signatures.required", false); lockPref("extensions.langpacks.signatures.required", false); nsvo = Cu.import("resource://gre/modules/addons/XPIInstall.jsm", {}); var shouldVerify = nsvo.shouldVerifySignedState; nsvo.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon); if (!old) nsvo.XPIDatabase.isDisabledLegacy = () => false; })(Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}));} catch(ex) {Cu.reportError(ex);} // try {({ ids: [ "custombuttons@xsms.org", ], init(xrt) { if (xrt.inSafeMode) return; Cu.import("resource://gre/modules/addons/XPIProvider.jsm", this); var load = async file => { var rootURI = this.XPIInternal.getURIForResourceInFile(file, ""); Cu.import(rootURI.resolve("startup.jsm"), {}).start(rootURI); } var proto = this.XPIInternal.BootstrapScope.prototype; var func = proto._beforeCallBootstrapMethod; proto._beforeCallBootstrapMethod = () => { proto._beforeCallBootstrapMethod = func; for(var addon of this.XPIInternal.XPIStates.enabledAddons()) this.ids.includes(addon.id) && !addon.loader && load(addon.file); } } }).init(Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime));} catch(ex) {Cu.reportError(ex);}
Отредактировано Dumby (17-01-2020 13:36:06)
Отсутствует