Что нужно добавить или изменить в этом скрипте, что бы что бы вставлять выделенный текст СКМ ?
В этом? Ничего. Есть настройка middlemouse.paste
В префке
Можно. Например ucf.autocopy.enabled
Устанавливть, разумеется, извне, любым способом.
А чтобы подхватывало
/* class AutoCopyChild extends JSWindowActorChild { constructor() { super(); this.listener = { QueryInterface, notifySelectionChanged: (d, sel, reason) => */ var enabled = Cc["@mozilla.org/preferences-service;1"] .getService(Ci.nsIPrefBranch).getBoolPref.bind(null, "ucf.autocopy.enabled"); class AutoCopyChild extends JSWindowActorChild { constructor() { super(); this.listener = { QueryInterface, notifySelectionChanged: (d, sel, reason) => enabled(false) &&
Отсутствует
Dumby
Да заделал вроде, кому надо и кнопка туда-сюда
Cам jsm
var EXPORTED_SYMBOLS = ["AutoCopyChild"]; ChromeUtils.domProcessChild.childID || ChromeUtils.registerWindowActor("AutoCopy", { messageManagerGroups: ["browsers"], allFrames: true, child: {moduleURI: __URI__, events: {DOMDocElementInserted: {}}} }); var re = /\S/; var QueryInterface = ChromeUtils.generateQI(["nsISelectionListener"]); var reasons = ["MOUSEUP", "KEYPRESS", "SELECTALL"] .map(reason => Ci.nsISelectionListener[reason + "_REASON"]); /* class AutoCopyChild extends JSWindowActorChild { constructor() { super(); this.listener = { QueryInterface, notifySelectionChanged: (d, sel, reason) => */ var enabled = Cc["@mozilla.org/preferences-service;1"] .getService(Ci.nsIPrefBranch).getBoolPref.bind(null, "ucf.autocopy.enabled"); class AutoCopyChild extends JSWindowActorChild { constructor() { super(); this.listener = { QueryInterface, notifySelectionChanged: (d, sel, reason) => enabled(false) && reasons.includes(reason) && re.test(sel) && this.docShell.doCommand("cmd_copy") }; } async handleEvent() { await new Promise(ChromeUtils.idleDispatch); (this.sel = this.contentWindow.getSelection()) .addSelectionListener(this.listener); } didDestroy() { this.sel.removeSelectionListener(this.listener); this.sel = this.listener = null; } }
(ps => { var s = "ucf.autocopy.enabled"; this._handleClick = () => cbu.setPrefs(s, cbu.getPrefs(s) == true ? false: true); var toggleImage = val => { self.image = cbu.getPrefs(s) ? 'data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMBAAQIAAcEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAcACAMEAQEAAAAAAAAAAAAAAAACAwADAAAAABUnAB9cqgC3a7wB4Gq5Ad1qugHearoB3mq6Ad5qugHearoB3mi4AN1qugHgYrMAxR43AC8AAAAAAAEAAAECAAQAAAQAV6AAprP9Vv/W/qn80/+f/9T/ov/U/6L/1P+i/9T/ov/U/6L/1/+n/9X+pfy3/WL/Y7QAvwEAAQAAAAAAFSgAH1ehAKlyzwD1htgf/YzcJ/2K2yP9i9sk/YvbJf2L2yX9i9sm/YnaIv2b4kP92/21/Nf+qv9quwHdBQkACAAAAQBeqwCzr/tR/8X0j/u+8X//vvJ//77ygP++8oD/vvKA/77yf/+98n7/wvSH/4zcKv+e4kv93v+0/2i5AN0DBwAIBQkACGu8AdzV/af/4v/B/d//u//h/7//4f+//+H/v//h/7//4f+//9/+u//n/8n/w/GK/4zaK/3g/7r/aroC3gMHAAgEBwAIarkC3dX/pf/g/sD93v67/9/+vv/g/r//4P6//+D+v//f/r7/3f66/+T/xv/B8Yb/j9st/eT/w/9qugPeAwcACAQHAAhqugLe2v+w/+j/z/3l/8r/5//N/+f/zv/n/87/5//O/+f/zf/l/sj/7P/W/8Xyj/+Q2y/96f/N/2q6A94DBwAIBAcACGq6At7f/7n/7v/c/ev/1v/t/9n/7f/a/+3/2v/t/9r/7f/Z/+r+1f/y/+P/yPKW/5DbMf3s/9X/aroE3gMHAAgEBwAIaroC3uP/wf/z/+j98P/h//L/5P/z/+X/8//l//P/5f/y/+T/8P7g//j/7v/L8p3/kdsy/fD/3P9rugTeAwcACAQHAAhqugLe5v/J//j/8v31/+r/9v/t//f/7v/3/+//9//u//b/7f/0/un//f/4/87yo/+R2zL98f/f/2q5Bd0DBwAIBAcACGq6At7p/8///P/6/fj/8f/6//T/+v/1//r/9f/6//X/+v/0//f+8P//////0fGo/5PbNf30/+f/a7wE3AQJAAgEBwAIabkC3er/0f/+//79+v/0//v/9//8//j//P/4//z/+P/7//f/+f70///////T8qz/i9go+8P9ef9dqwCzAAACAAUJAAhquwHd7f7a//////z+//39/////f////3////9/////f////39/vz9/////dzzvv5v0AD1VqECqRUnAB8AAAAAAQACAGK0AL/J/Yf/8v7k/O3/1//u/9n/7v/Z/+7/2f/u/9n/7v/Z/+3/1//x/eP8vfxu/1WgAKYAAAUAAQIABAABAAAAAAAAHjcALmGzAMVquwLgarkC3Wq6At5qugLearoC3mq6At5qugLearkC3Wu8AeBbqgC3FScAHwAAAAACAwADAAAAAAAAAAAAAAAAAwQCAQQIAAgEBwAIBAcACAQHAAgEBwAIBAcACAQHAAgEBwAIBAgABwMDAgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=' : 'data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgEDAAQACAcEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAHCAMBBAEAAAAAAAAAAAAAAAACAAMDAAAAABUAJx9cAKq3awG84GoBud1qAbreagG63moBut5qAbreagG63mgAuN1qAbrgYgCzxR4ANy8AAAAAAAABAAEAAgQABAAAVwCgprNW/f/Wqf7805///9Si///Uov//1KL//9Si///Uov//16f//9Wl/vy3Yv3/YwC0vwEBAAAAAAAAFQAoH1cAoalyAM/1hh/Y/Ywn3P2KI9v9iyTb/Ysl2/2LJdv9iybb/Yki2v2bQ+L927X9/Neq/v9qAbvdBQAJCAABAABeAKuzr1H7/8WP9Pu+f/H/vn/y/76A8v++gPL/voDy/75/8v+9fvL/wof0/4wq3P+eS+L93rT//2gAud0DAAcIBQAJCGsBvNzVp/3/4sH//d+7///hv///4b///+G////hv///4b///9+7/v/nyf//w4rx/4wr2v3guv//agK63gMABwgEAAcIagK53dWl///gwP793rv+/9++/v/gv/7/4L/+/+C//v/fvv7/3br+/+TG///BhvH/jy3b/eTD//9qA7reAwAHCAQABwhqArre2rD//+jP//3lyv//583//+fO///nzv//587//+fN///lyP7/7Nb//8WP8v+QL9v96c3//2oDut4DAAcIBAAHCGoCut7fuf//7tz//evW///t2f//7dr//+3a///t2v//7dn//+rV/v/y4///yJby/5Ax2/3s1f//agS63gMABwgEAAcIagK63uPB///z6P/98OH///Lk///z5f//8+X///Pl///y5P//8OD+//ju///LnfL/kTLb/fDc//9rBLreAwAHCAQABwhqArre5sn///jy//316v//9u3///fu///37///9+7///bt///06f7//fj//86j8v+RMtv98d///2oFud0DAAcIBAAHCGoCut7pz////Pr//fjx///69P//+vX///r1///69f//+vT///fw/v//////0ajx/5M12/305///awS83AQACQgEAAcIaQK53erR///+/v/9+vT///v3///8+P///Pj///z4///79///+fT+///////TrPL/iyjY+8N5/f9dAKuzAAIAAAUACQhqAbvd7dr+//////z+/f/9/////f////3////9/////f////39/P79/////dy+8/5vAND1VgKhqRUAJx8AAAAAAQIAAGIAtL/Jh/3/8uT+/O3X///u2f//7tn//+7Z///u2f//7tn//+3X///x4/38vW78/1UAoKYABQAAAQACBAAAAQAAAAAAHgA3LmEAs8VqArvgagK53WoCut5qArreagK63moCut5qArreagK53WsBvOBbAKq3FQAnHwAAAAACAAMDAAAAAAAAAAAAAAAAAwIEAQQACAgEAAcIBAAHCAQABwgEAAcIBAAHCAQABwgEAAcIBAAIBwMCAwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA='; this.tooltipText = cbu.getPrefs(s) ? 'Autocopy' : 'Stop Autocopy'; } toggleImage(); ps.addObserver(s, toggleImage, false); addDestructor(() => ps.removeObserver(s, toggleImage)); })(Services.prefs); this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };
Отредактировано ВВП (02-07-2022 01:49:57)
Отсутствует
FF 104.0a1 (2022-06-30) + UCF 2021-6-5 ("старый").
Спасибо!
ВВП
Код jsm вставлять, как в посте Dumby №16519?
А что делать со вторым кодом? Сохранить и загружать там же, в custom_script.js
loadscript("второй_код.js");
или просто дописать в конец custom_script.js?
У меня не сработало, версияUCF 2021-6-5 ("старая")...
Отредактировано xrun1 (02-07-2022 03:33:29)
Отсутствует
Есть расширение Copy On Select
Внутри простой скрипт
window.addEventListener( 'mouseup', function() { if (document.getSelection().toString() != '') { document.execCommand('copy'); } }, false );
Можно ли для CB код сконвертировать и удалить расширение?
Отсутствует
momo2000
Попробовал этот код сделать для Tampermonkey. Работает, если выделить текст, но при выделении части ссылки (для этого у меня тоже есть код в Tampermonkey) эту часть ссылки не копирует.
// ==UserScript== // @name Autocopy // @namespace https://addons.mozilla.org/en-US/firefox/addon/copy-on-select/ // @version 0.1 // @description Copy On Select // @author spyrosoft // @include * // @icon https://www.google.com/s2/favicons?sz=64&domain=mozilla-russia.org // @grant none // @run-at document-end // ==/UserScript== 'use strict'; window.addEventListener( 'mouseup', e => { if (document.getSelection().toString() != '') { document.execCommand('copy'); } }, false );
Отредактировано xrun1 (02-07-2022 12:04:23)
Отсутствует
Подскажите, недавно браузер обновился и пропали все кнопки, я переустановил расширение, пробуя разные коды для config.js и все кнопки вернулись. Но теперь пишет "Работа Custom Buttons в Firefox не была проверена, поэтому оно было отключено" и после перезапуска браузера все кнопки также пропадают. Какой нужен код в config.js, чтобы все работало нормально? Или как это исправить?
Отсутствует
Okralis
а это xpinstall.signatures.required =false и
extensions.experiments.enabled=true
extensions.legacy.enabled=true
toolkit.legacyUserProfileCustomizations.stylesheets=true
Отредактировано ВВП (03-07-2022 20:47:11)
Отсутствует
Хочу запуск или about:newtab либо about:home
Это дефолт. Так оно из коробки и есть.
За исключением приватных окон, где суют about:privatebrowsing
browser.startup.homepage - ... не помогает
Вот только что назначил этой настройке значение
data:text/plain;charset=utf-8,Хомка
И, даже без никакого перезапуска,
Ctrl+N — и вот оно, новое окно со вкладкой с надписью «Хомка».
Короче — у тебя что-то сломано.
Отсутствует
Dumby
Снят вопрос .
[label="Новая вкладка"] .tab-icon-image{ list-style-image: url(chrome://global/skin/icons/Portrait.png) !important; }
Или
tab:not([labeldirection]) .tab-icon-image{ list-style-image: url(chrome://global/skin/icons/Portrait.png) !important; }
Отредактировано ВВП (04-07-2022 17:13:11)
Отсутствует
Доброго времени.
1. Выполнил :
а это xpinstall.signatures.required =false и
extensions.experiments.enabled=true
extensions.legacy.enabled=true
toolkit.legacyUserProfileCustomizations.stylesheets=true
2. Внес изменения в скрипт config.js
Для версии 99 и выше:
https://forum.mozilla-russia.org/viewtopic.php?id=70326
3. Обновил расширение Custom Buttons из поста :
https://forum.mozilla-russia.org/viewtopic.php?pid=799866#p799866
Запустил браузер: пропали все кнопки., чтобы все работало нормально - Что еще исправить?
Distance Subordinatio!
Отсутствует
KOMMEHTATOP
congig.js
// try {(nsvo => { var o = Cu.getGlobalForObject(nsvo).Object, {freeze} = o, NEW; o.freeze = obj => { if (Components.stack.caller.filename != "resource://gre/modules/AppConstants.jsm") return freeze(obj); obj.MOZ_REQUIRE_SIGNING = false; if ((NEW = "MOZ_ALLOW_ADDON_SIDELOAD" in obj)) lockPref("extensions.experiments.enabled", true); else obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true, lockPref("extensions.legacy.enabled", true); return (o.freeze = freeze)(obj); } nsvo = Cu.import("resource://gre/modules/addons/XPIInstall.jsm", {}); var shouldVerify = nsvo.shouldVerifySignedState; nsvo.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon); if (NEW) nsvo.XPIDatabase.isDisabledLegacy = () => false; })( "permitCPOWsInScope" in Cu ? Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}) : Cu );} catch(ex) {Cu.reportError(ex);} // (async xp => { var imprt, ids = [ "custombuttons@xsms.org", ]; if (Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).inSafeMode) return; if (Cr.NS_ERROR_FILE_TARGET_DOES_NOT_EXIST) var {XPIInternal} = (imprt = url => Cu.import(url, {}))(xp); else { // Fx 101+ var g = Cu.getGlobalForObject(Cu), te = new g.TextEncoder(); var imp = g.ChromeUtils.import, {XPIInternal} = imp(xp); var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); var rph = ios.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler); imprt = (url, id) => { var subst = te.encode(id).join(""); rph.setSubstitution(subst, ios.newURI(url)); return imp(`resource://${subst}/`); } } var load = async (file, id) => { var rootURI = XPIInternal.getURIForResourceInFile(file, ""); imprt(rootURI.resolve("startup.jsm"), id).start(rootURI); } var proto = XPIInternal.BootstrapScope.prototype; var func = proto._beforeCallBootstrapMethod; proto._beforeCallBootstrapMethod = () => { proto._beforeCallBootstrapMethod = func; for(var {id, loader, file} of XPIInternal.XPIStates.enabledAddons()) ids.includes(id) && !loader && load(file, id); } })("resource://gre/modules/addons/XPIProvider.jsm"); // try { (function() { var Cu = Components.utils; var {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); var sandbox = Cu.Sandbox(Services.scriptSecurityManager.getSystemPrincipal(), { wantComponents: true, sandboxName: "user_chrome_files" }); sandbox.Services = Services; Cu.evalInSandbox(` var Ci = Components.interfaces; var config = { subScript: {}, observe: function(aSubject, aTopic, aData) { if (aTopic == "domwindowopened" && aSubject instanceof Ci.nsIDOMWindow) { aSubject.addEventListener("DOMContentLoaded", function domLoad() { aSubject.removeEventListener("DOMContentLoaded", domLoad, true); var loc = aSubject.location; if (loc && loc.protocol == "chrome:") { try { config.subScript.user_chrome.loadIntoWindow(aSubject, loc.href); } catch(ex) { } } }, true); } else if (aTopic == "profile-after-change") { Services.obs.removeObserver(config, "profile-after-change"); var file = Services.dirsvc.get("UChrm", Ci.nsIFile); file.append("user_chrome_files"); file.append("user_chrome.manifest"); if (!file.exists() || !file.isFile()) { this.removeObs(); return; } try { var reg = Components.manager.QueryInterface(Ci.nsIComponentRegistrar); reg.autoRegister(file); } catch(ex) { this.removeObs(); return; } try { Services.scriptloader.loadSubScript("chrome://user_chrome_files/content/user_chrome.js", this.subScript, "UTF-8"); } catch(ex) { this.removeObs(); } } }, removeObs: function() { Services.obs.removeObserver(config, "domwindowopened"); } }; Services.obs.addObserver(config, "profile-after-change", false); Services.obs.addObserver(config, "domwindowopened", false); `, sandbox); })(); } catch(ex) {Cu.reportError(ex);}
Отредактировано ВВП (04-07-2022 18:11:27)
Отсутствует
Farby Все ЗАРАБОТАЛО!.
ВВП Все ЗАРАБОТАЛО! (просто скрипт congig.js-внес)
!!! ОЧИСТИЛ!!! папку startupCache - в профие !!!
И кнопка появилась:
Отредактировано KOMMEHTATOP (08-07-2022 15:49:26)
Distance Subordinatio!
Отсутствует
Dumby
browser.js
var gPageIcons = { "about:home": "chrome://global/skin/icons/Portrait.png", "about:newtab": "chrome://global/skin/icons/Portrait.png", "about:welcome": "chrome://global/skin/icons/Portrait.png", "about:blank": "chrome://global/skin/icons/Portrait.png", "about:config": "chrome://global/skin/icons/Portrait.png", "about:about": "chrome://global/skin/icons/Portrait.png", "about:privatebrowsing": "chrome://global/skin/icons/Portrait.png", }; var gInitialPages = [ "about:blank", "about:config", "about:newtab", "about:home", "about:privatebrowsing", "about:welcomeback", "about:sessionrestore", "about:welcome", "about:newinstall", ];
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ { // start private scope for gBrowser /** * A set of known icons to use for internal pages. These are hardcoded so we can * start loading them faster than ContentLinkHandler would normally find them. */ const FAVICON_DEFAULTS = { "about:newtab": "chrome://global/skin/icons/Portrait.png", "about:home": "chrome://global/skin/icons/Portrait.png", "about:config": "chrome://global/skin/icons/Portrait.png", "about:blank": "chrome://global/skin/icons/Portrait.png", };
Отредактировано ВВП (04-07-2022 22:27:17)
Отсутствует
browser.js
tabbrowser.js
Не, это всё не то.
Если хочется что-нибудь «подставить в js»,
то можно попробовать изменить метод onPageShow() в
resource:///actors/LinkHandlerChild.jsm примерно как-то так
… onPageShow(event) { if (event.target != this.document) { return; } if (this.document.documentURIObject?.schemeIs("view-source")) return this.sendAsyncMessage("Link:SetIcon", { canUseForTab: true, iconURL: "chrome://global/skin/icons/Portrait.png" }); this.addRootIcon(); if (this._iconLoader) { this._iconLoader.onPageShow(); } }
Отсутствует
тоже пропали кнопки с CB с какой версии не запомнил.
пробовал как советовали тут выше
Отредактировано muxtair (12-07-2022 12:30:51)
Отсутствует