Super.
FF131: Schon wieder funktionieren 2 js-Scripte nicht mehr
-
genetic -
1. Oktober 2024 um 19:16 -
Erledigt
-
-
Der Code in Beitrag #9 ist an mehreren Stellen fehlerhaft, der dürfte so nicht funktionieren: Am Ende von Zeile 10 steht ein Komma statt einer schließenden Klammer und auch in der letzten Zeile wird nicht korrekt geschlossen, was in der ersten Zeile begonnen wurde.
Schlimm, schlimm. Da habe ich versehentlich in Beitrag #9 das Skript für den Start aus dem Datei-Menü erwischt statt das für den Neustart aus dem Hamburger-Menü. Oh, oh, man wird so langsam alt. Ich bitte alle um Verzeihung.
-
Ansonsten habe ich nur das hier: […]
Danke. Da wäre dann Vieles zu ändern.
-
Ich frage mich ja im Nachhinein, ohne dem vorher in den Scripts hier Beachtung geschenkt zu haben, wieso überhaupt so häufig on*-Attribute via Script gesetzt wurden. Die addEventListener()-Methode wurde bereits in Firefox 1 vor 20 Jahren (!) unterstützt (noch frühere Daten haben die MDN web docs nicht, wahrscheinlich wird es sogar noch länger unterstützt) und war immer der bessere Weg, in JavaScript auf Events zu hören. Bei den on*-Attributen geht es ja darum, Scripts direkt im HTML/XUL unterzubringen, weil man eben keine separate Script-Datei hat. Aber wenn man sich sowieso bereits in einem Script befindet, ist es ja unnötig, das Script erst ins HTML/XUL zu schreiben, sondern kann es auch direkt an der Stelle ausführen. Ein weiterer Nachteil:
JavaScriptconst button = document.getElementById('button'); button.onclick = function1; button.onclick = function2; button.addEventListener('click', function3); button.addEventListener('click', function4);
In diesem Beispiel werden function2, function3 und function4 ausgeführt, aber function1 nicht. Denn jedes Attribut kann es nur ein einziges Mal geben, bei mehrfacher Verwendung überschreibt man also die Funktion. Das passiert bei addEventListener() nicht, was auch erklären kann, wieso vielleicht zwei unterschiedliche Scripts, die das gleiche Element betreffen, nicht gemeinsam funktionieren.
Und dazu kommt das bereits erwähnte leichtere Schreiben von Code ohne das „\“ nach jeder Zeile sowie Syntax-Highlighting hier im Forum. Und bei Verwendung eines entsprechenden Programms ggf. Unterstützung dadurch wie Code-Vorschläge oder Hervorhebung von Fehlern, was ja nicht möglich ist, wenn das Script nicht als Script erkannt wird, sondern nur als einfacher Text ausgezeichnet ist.
-
Die addEventListener()-Methode wurde bereits in Firefox 1 vor 20 Jahren (!) unterstützt
Nicht, dass ich mich gut auskenne, aber belegt nicht jeder eventListener etwas Speicherplatz? Das war dann schon ein Kriterium, lieber onclick zu verwenden. (Ja, das Skript selbst wird ebenso in den Speicher geladen …)
Ergänzung: Ich lese gerade, dass der IE kein addEventListener beherrschte. dann war onclick für Autoren bequemer und mag später aus Gewöhnung weiter benutzt worden sein.
-
aber belegt nicht jeder eventListener etwas Speicherplatz?
Wenn man stattdessen ein Attribut im HTML nutzt, ist das ja auch ein Eventlistener. Ich wüsste nicht, wieso das vo dem Aspekt her einen Unterschied machen sollte. So oder so ist das nicht wahrnehmbar, vermutlich nicht einmal messbar. Das, was wirklich Einfluss auf die Performance hat, ist der Code, der dann letztlich ausgeführt wird, unabhängig von der Methode, den Eventlistener zu registrieren.
Ich lese gerade, dass der IE kein addEventListener beherrschte. dann war onclick für Autoren bequemer und mag später aus Gewöhnung weiter benutzt worden sein.
Der Internet Explorer kannte bis einschließlich Version 8 kein addEventListener, dafür attachEvent. Man hätte sich auch damals einfach eine Funktion schreiben können, die intern dann entweder die eine oder die andere Methode aufruft. Und seit Version 9 kannte auch der Internet Explorer addEventListener.
Zu der Zeit hat man in der Webentwicklung aber sowieso meistens auf jQuery gesetzt, um sich um die Kompatibilität keine Sorgen machen zu müssen. Insofern weiß ich nicht, ob Gewöhnung wirklich ein Thema war, denn jQuery funktioniert ja auch sichtbar anders als „Vanilla JavaScript“.
-
Danke, Sören Hentzschel !
-
Heißt das, das alle onclick Beschreibungen in Scripts in addEventListener umzuschreiben sind?
Siehe z. B. hier: Zeile 480 und 495JavaScript
Alles anzeigen// ==UserScript== // @name AddonsPage.uc.js // @description Bei about:addons (Add-ons Verwaltung) rechtsklick auf installierte Erweiterung // @description zum Anzeigen der neu hinzugefügen Kontextmenüeinträge. // @description Bei Detailseite (klick auf Mehr) wird die Installationsadresse - Pfad, hinzugefügt // @author ywzhaiqi // @include main // @charset utf-8 // @version 2018.06.27 // @downloadURL https://raw.github.com/ywzhaiqi/userChromeJS/master/AddonsPage/AddonsPage.uc.js // @homepageURL https://github.com/ywzhaiqi/userChromeJS/tree/master/AddonsPage // @reviewURL http://bbs.kafan.cn/thread-1617407-1-1.html // @optionsURL about:config?filter=view_source.editor.path // @note - Rechtsklick bei Add-On, um das Menü anzuzeigen bei (Erweiterungen, Themes, Plug-Ins), und kopieren Sie den Namen. // @note - Greasemonkey und Scriptish verfügen schon über dieses Menü. // @note - Bei GM-Skript, Erweiterungen und Themen die Installationsadresse und den Plug-in-Pfad zum Kontextmenü hinzugefügt // @note - Seite für die Skriptverwaltung wurde hinzugefügt // @note - Rechtsklickmenü "Add-ons anzeigen" erfordert DOM Inspector, geht nur bis Firefox 56.0.2 // @note - UC-Skript-Verwaltungsschnittstelle // @note - Aktivieren deaktivieren von Scripten erfordert rebuild_userChrome.uc.xul Script // @note - Für Editor unter about:config bei view_source.editor.path den Pfad zum Editor eingeben // @note - Icon Style hinzugefügt,siehe Homepage für Details // @note - Weitere Informationen finden Sie auf der Homepage // ==/UserScript== location == AppConstants.BROWSER_CHROME_URL && (function() { var iconURL = ""; // uc Symbol für Scriptliste var Config = { debug: 0, // 1 = Rechtsklickmenü UC Scriptverwaltung - Menüeinträge anzeigen, 0 = nicht anzeigen detailView: 1, // Auf Details-Seite Installation-Link hinzufügen }; if (window.AM_Helper) { // Debuggen ändern, Neuladen ohne Neustart window.AM_Helper.uninit(); delete window.AM_Helper; } if (window.userChromeJSAddon) { window.userChromeJSAddon.uninit(); delete window.userChromeJSAddon; } Cu.import("resource://gre/modules/AddonManager.jsm"); let isCN = false; try { isCN = Services.prefs.getCharPref("general.useragent.locale").indexOf("zh") != -1; } catch (e) { try { isCN = Services.prefs.getCharPref("intl.locale.requested").indexOf("zh") != -1; } catch (e) { } } var ApplyPatchForScript = (function() { const USO_URL_RE = /(^https?:\/\/userscripts.org.*\/scripts\/source\/\d+)\.\w+\.js$/i; const GFO_URL_RE_1 = /(^https?:\/\/greasyfork.org\/scripts\/code\/\w+)\.\w+\.js$/i; const GFO_URL_RE_2 = /(^https?:\/\/greasyfork.org\/scripts\/[^\/]+\/)code[\.\/].*\w+\.js$/i; // (http://binux.github.io/ThunderLixianExporter/)master/ThunderLixianExporter.user.js const GITHUB_URL_RE_1 = /(^https?:\/\/\w+.github.io\/\w+\/)master\/.*.*\w+\.js$/i; // 从 https://raw.githubusercontent.com/ywzhaiqi/userscript/master/noNoticetitleflashOnBBS.user.js // 转为 https://github.com/ywzhaiqi/userscript/blob/master/noNoticetitleflashOnBBS.user.js const GITHUB_URL_RE_2 = /(^https?:\/\/raw.githubusercontent.com\/.*?\/master\/.*\.user\.js$)/i; function getScriptHomeURL(downURL) { var url; if (downURL && downURL.startsWith('http')) { if (USO_URL_RE.test(downURL)) { url = RegExp.$1.replace(/source/, "show"); } else if (GFO_URL_RE_1.test(downURL)) { url = RegExp.$1; } else if (GFO_URL_RE_2.test(downURL)) { url = RegExp.$1; } else if (GITHUB_URL_RE_1.test(downURL)) { url = RegExp.$1; } else if (GITHUB_URL_RE_2.test(downURL)) { url = RegExp.$1.replace('raw.githubusercontent.com', 'github.com') .replace('/master/', '/blob/master/'); } } return url ? decodeURIComponent(url) : null; } function addHomePage() { // Scriptish Scripte-Homepage hinzufügen if (window.Scriptish_config) { Scriptish_config.scripts.forEach(function(script) { if(script.homepageURL) return; var url = script.updateURL || script.downloadURL; script.homepageURL = getScriptHomeURL(url); }); } // Greasemonkey Scripte-Homepage hinzufügen AddonManager.getAddonsByTypes(['greasemonkey-user-script'], function (aAddons) { aAddons.forEach(function (aAddon) { if (aAddon.homepageURL) return; var url = aAddon._script._downloadURL || aAddon._script._updateURL; var homepageURL = getScriptHomeURL(url); if (homepageURL) { aAddon.homepageURL = homepageURL; } else { // console.log(aAddon.name, url); } }); }); } return { init: addHomePage } })(); setTimeout(function() { ApplyPatchForScript.init(); }, 2000); window.AM_Helper = { init: function() { document.addEventListener("DOMContentLoaded", this, false); this.platformVersion = parseFloat(Services.appinfo.platformVersion); }, uninit: function() { document.removeEventListener("DOMContentLoaded", this, false); }, handleEvent: function(event) { switch (event.type) { case "DOMContentLoaded": var doc = event.target; var win = doc.defaultView; if (["about:addons", "chrome://mozapps/content/extensions/extensions.xhtml"].indexOf(doc.URL) == -1) return; this.addPopupMenu(doc); // Menü-Aufruf win.AM_Helper = AM_Helper; this.win = win; if (Config.detailView) { var self = this; var observer = new MutationObserver(function(e) { e = e[e.length-1]; if (e.attributeName == "loading") { var doc = e.target.ownerDocument; self.setUrlOrPath(doc); } }); observer.observe(doc.getElementById("detail-view"), {attributes: true}); } break; case "popupshowing": this.getAddon(this.win.document.popupNode.value, this.setItemsAttributes, event); break; } }, addPopupMenu: function(doc) { var ins = doc.getElementById("menuitem_uninstallItem"); if (!ins) return; ins = ins.nextSibling; var popup = ins.parentNode; var menuitem = $C("menuseparator", { id: "AM-separator-1" }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AM-inspect-addon", label: isCN ? "查看附加组件" : "Erweiterung inspizieren", accesskey: "i", tooltipText: isCN ? "调用 DOM Inspector 查看 addon 对象" : "Addon mit Dom Inspector inspizieren", oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.inspectAddon);" }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AM-edit-script", label: isCN ? "编辑" : "Script bearbeiten", accesskey: "b", hidden: true, oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.editScript);" }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AM-reload-uc", hidden: true, label: isCN ? "重载 uc 脚本(慎用)" : "UC Script neuladen", style: "font-weight:bold", tooltiptext: "Nur teilweise Skriptunterstützung. Bei Problemen Firefox Neustarten.", oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.reloadUserChromeJS);" }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AM-browse-dir", label: isCN ? "查看所在目录" : "Installations-Verzeichnis", accesskey: "V", oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.browseDir);" }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AM-open-url", label: isCN ? "打开安装页面" : "Installationsseite öffnen", accesskey: "s", tooltiptext: null, oncommand: "openURL(this.tooltipText)", }); popup.insertBefore(menuitem, ins); menuitem = $C("menuitem", { id: "AM-copy-name", label: isCN ? "复制名称" : "Namen kopieren", accesskey: "k", oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.copyName);" }); popup.insertBefore(menuitem, ins); popup.addEventListener("popupshowing", this, true); }, setItemsAttributes: function(aAddon, event) { var popup = event.target; var doc = popup.ownerDocument; var isExtension = (aAddon.type == "extension"), isTheme = (aAddon.type == "theme"), isPlugin = (aAddon.type == "plugin"), isUserStyle = (aAddon.type == "userstyle"), isScriptish = (aAddon.type == "userscript"), isGreasemonkey = (aAddon.type == "user-script") || // Greasemonkey (aAddon.type == "greasemonkey-user-script"), // Greasemonkey 1.7+ isUserScript = isGreasemonkey || isScriptish, isUserChromeJS = (aAddon.type == "userchromejs"), isService = (aAddon.type == "service"), menuitem ; menuitem = doc.getElementById("AM-browse-dir"); menuitem.hidden = isUserStyle || isUserScript || isService; menuitem = doc.getElementById("AM-edit-script"); menuitem.hidden = !isUserChromeJS; menuitem = doc.getElementById("AM-reload-uc"); menuitem.hidden = !Config.debug || !isUserChromeJS; var className = isGreasemonkey ? "greasemonkey" : ""; // install url menuitem = doc.getElementById("AM-open-url"); var installURL = isExtension ? (this.getInstallURL(aAddon) || aAddon.homepageURL) : (aAddon.homepageURL || this.getInstallURL(aAddon)); menuitem.tooltipText = installURL; menuitem.hidden = !installURL; menuitem.className = installURL ? className : ''; menuitem = doc.getElementById("AM-inspect-addon"); menuitem.disabled = !("inspectObject" in window); menuitem.className = menuitem.disabled ? '' : className; menuitem = doc.getElementById("AM-copy-name"); menuitem.tooltipText = aAddon.name; menuitem.className = className; // if(isUserScript && !isScriptish) { // var usoURL = ""; // if (aAddon._script) { // var usDownloadURL = aAddon._script._downloadURL; // var usUpdateURL = aAddon._script._updateURL; // if (USO_URL_RE.test(usDownloadURL)) { // usoURL = usDownloadURL; // } else if (USO_URL_RE.test(usUpdateURL)) { // usoURL = usUpdateURL; // } // } // menuitem = doc.getElementById("AM-go-uso"); // menuitem.disabled = !USO_URL_RE.test(usoURL); // menuitem.className = isUserScript ? menuitem.disabled ? "" : "greasemonkey" : ""; // menuitem.tooltipText = usoURL.replace(/source/, "show") // .replace(/.\w+.js$/, ""); // menuitem = doc.getElementById("AM-find-uso"); // menuitem.disabled = USO_URL_RE.test(usoURL); // menuitem.className = isUserScript ? menuitem.disabled ? "" : "greasemonkey" : ""; // menuitem.setAttribute("find-on-uso", // "https://www.google.com.hk/search?q=site:userscripts.org+inurl:scripts+inurl:show+" + // encodeURIComponent(aAddon.name)); // } }, getPopupNode: function (aNode) { var doc = aNode.ownerDocument; return "triggerNode" in aNode.parentNode ? aNode.parentNode.triggerNode : doc.popupNode; }, getAddon: function (aId, aCallback, aEvent) { var self = this; if (this.win.gDetailView._addon) { aCallback.apply(this, [this.win.gDetailView._addon, aEvent]); return; } (self.platformVersion < 61.0? new Promise((resolve, reject) => AddonManager.getAllAddons(addons => resolve(addons))): AddonManager.getAllAddons() ).then(addons => { for (var i = 0; i < addons.length; i++) { if (addons[i].id == aId) { aCallback.apply(self, [addons[i], aEvent]); return; } } }); }, inspectAddon: function (aAddon) { inspectObject(aAddon); }, inspectUserscript: function (aAddon) { inspectObject(aAddon._script); }, browseDir: function (aAddon) { switch (aAddon.type) { case "plugin": var pathes = aAddon.pluginFullpath; for (var i = 0; i < pathes.length; i++) { this.revealPath(pathes[i]); } return; case "userchromejs": var file = aAddon._script.file; if (file.exists()) file.reveal(); return; } // addon var gecko = parseInt(Services.appinfo.platformVersion); var nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", (gecko >= 14) ? "nsIFile" : "nsILocalFile", "initWithPath"); var dir = Services.dirsvc.get("ProfD", Ci.nsIFile); dir.append("extensions"); dir.append(aAddon.id); var fileOrDir = dir.path + (dir.exists() ? "" : ".xpi"); //Application.console.log(fileOrDir); try { (new nsLocalFile(fileOrDir)).reveal(); } catch (ex) { var addonDir = /.xpi$/.test(fileOrDir) ? dir.parent : dir; try { if (addonDir.exists()) { addonDir.launch(); } } catch (ex) { var uri = Services.io.newFileURI(addonDir); var protSvc = Cc["@mozilla.org/uriloader/external-protocol-service;1"]. getService(Ci.nsIExternalProtocolService); protSvc.loadUrl(uri); } } }, editScript: function(aAddon) { if (aAddon.type == "userchromejs") { var path = aAddon._script.file.path; this.launchEditor(path); } }, reloadUserChromeJS: function (aAddon) { if (aAddon.type != "userchromejs") return; var result = confirm("Neu laden, sicher?\n Mit Vorsicht verwenden, es wird nur von einigen Skripten unterstützt.\n Nicht unterstützte Skripte können Probleme beim Hinzufügen von Schaltflächen,\n Menüs oder Ereignissen haben.\n Bei Problemen, Firefox neu starten."); if (!result) return; var script = aAddon._script; Services.obs.notifyObservers(null, "startupcache-invalidate", ""); Services.scriptloader.loadSubScript(script.url, {}, script.charset || "utf-8"); }, launchEditor: function(path){ var editor = Services.prefs.getCharPref("view_source.editor.path"); if (!editor) { toOpenWindowByType('pref:pref', 'about:config?filter=view_source.editor.path'); return; } var UI = Cc['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Ci.nsIScriptableUnicodeConverter); var platform = window.navigator.platform.toLowerCase(); UI.charset = platform.indexOf('win') > -1 ? 'GB2312' : 'UTF-8'; path = UI.ConvertFromUnicode(path); var appfile = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); appfile.initWithPath(editor); var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); process.init(appfile); process.run(false, [path], 1, {}); }, copyName: function (aAddon) { this.copyToClipboard(aAddon.name); }, getInstallURL: function(aAddon) { aAddon = aAddon || this.win.gViewController.viewObjects.detail._addon; if (!aAddon) return null; var url = null; switch (aAddon.type) { case "extension": case "theme": url = (aAddon.contributionURL || aAddon.reviewURL) || null; return url && url.replace(/\/developers|\/reviews/g, "") || aAddon.creator.url; case "greasemonkey-user-script": return aAddon._script._downloadURL || aAddon._script._updateURL; case "userscript": url = aAddon._downloadURL || aAddon._updateURL; return url; case "userchromejs": return aAddon.homepageURL || aAddon.reviewURL || aAddon.downloadURL || aAddon.updateURL; default: return aAddon.homepageURL; } }, get getPath() { var url = this.win.gViewController.viewObjects.detail._addon; if (!url) return false; return url.pluginFullpath || false; }, setUrlOrPath :function(doc) { var installURL = this.getInstallURL(); if (!installURL && !this.getPath) return; if (!doc.getElementById("detail-InstallURL-row")) { var value = "", label = ""; if (this.win.gViewController.currentViewId.indexOf("detail") != -1) { var aAddon = this.win.gViewController.viewObjects.detail._addon; switch (aAddon.type) { case "extension": case "theme": case "greasemonkey-user-script": value = installURL; label = isCN? "安装页面": "Installationseite"; break; case "plugin": value = this.getPath; label = isCN? "路径": "Pfad"; break; } } if (!!value && !!label) { const row = $C("row", { id: "detail-InstallURL-row", class: "detail-row-complex", label: label, }); row.appendChild($C("label", { class: "detail-row-label", value: label, })); if (typeof(value) != "string") { const vbox = row.appendChild($C("vbox")); for (var i=0;i< value.length;i++) { vbox.appendChild($C("label", { class: "detail-row-value text-link", crop: "end", value: value[i], href: value[i], onclick: ` if(event.button == 0) { AM_Helper.revealPath(this.value); } else if (event.button == 2){ AM_Helper.copyToClipboard(this.value); } return false;`, })); } } else { row.appendChild($C("label", { class: "detail-row-value text-link", crop: "end", value: value, href: value, onclick: ` if(event.button == 2){ AM_Helper.copyToClipboard(this.value); return false; }`, })); } doc.getElementById("detail-rows").appendChild(row); } } }, revealPath: function(path) { var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); file.initWithPath(path); if (file.exists()) file.reveal(); }, copyToClipboard: function (aString) { Cc["@mozilla.org/widget/clipboardhelper;1"]. getService(Ci.nsIClipboardHelper).copyString(aString); } }; window.userChromeJSAddon = { scripts: [], unloads: [], init: function() { if ('userchromejs' in AddonManager.addonTypes) return; this.initScripts(); this.registerProvider(); this.addStyle(); }, uninit: function() { this.unloads.forEach(function(func) { func(); }); }, initScripts: function() { var scripts = window.userChrome_js.scripts.concat(window.userChrome_js.overlays); var self = this; scripts.forEach(function(script, i) { self.scripts[i] = new ScriptAddon(script); }); }, getScriptById: function(aId) { for (var i = 0; i < this.scripts.length; i++) { if (this.scripts[i].id == aId) return this.scripts[i]; } return null; }, registerProvider: function() { var types = null; if (AddonManagerPrivate.AddonType) { types = [new AddonManagerPrivate.AddonType( "userchromejs", "", isCN ? "uc 脚本" : "userChrome JS", AddonManager.VIEW_TYPE_LIST, 9000)]; } const provider = { getAddonByID: function(aId, aCallback) { let script = userChromeJSAddon.getScriptById(aId); if (aCallback) aCallback(script); else return Promise.resolve(script); // Fx61.0- }, getAddonsByTypes: function(aTypes, aCallback) { if (aTypes && aTypes.indexOf("userchromejs") < 0) { if (aCallback) aCallback([]); else return Promise.resolve([]); } else { if (aCallback) aCallback(userChromeJSAddon.scripts); else return Promise.resolve(userChromeJSAddon.scripts); } } }; AddonManagerPrivate.registerProvider(provider, types); this.unloads.push(function() { AddonManagerPrivate.unregisterProvider(provider); }); }, addStyle: function() { let data = '@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);\ \ @-moz-document url("about:addons"), url("chrome://mozapps/content/extensions/extensions.xhtml") {\ #category-userchromejs > .category-icon {\ list-style-image: url(data:image/png;base64,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);\ }\ }'; let styleService = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); let styleURI = Services.io.newURI("data:text/css," + encodeURIComponent(data), null, null); styleService.loadAndRegisterSheet(styleURI, Ci.nsIStyleSheetService.USER_SHEET); this.unloads.push(function() { styleService.unregisterSheet(styleURI, Ci.nsIStyleSheetService.USER_SHEET); }); }, }; function ScriptAddon(aScript) { this._script = aScript; this.id = this._script.url; this.name = this._script.filename; this.description = this._script.description; this.enabled = !userChrome_js.scriptDisable[this.name]; // Änderung - Anpassung für userChrome.js this.version = this._script.version || null; this.author = this._script.author || null; this.homepageURL = this._script.homepageURL || null; this.reviewURL = this._script.reviewURL || null; this.reviewCount = 0; this.fullDescription = this._script.fullDescription || null; this.downloadURL = this._script.downloadURL || null; this.iconURL = iconURL; } ScriptAddon.prototype = { version: null, type: "userchromejs", isCompatible: true, blocklistState: 0, appDisabled: false, scope: AddonManager.SCOPE_PROFILE, name: null, creator: null, pendingOperations: AddonManager.PENDING_NONE, // Muss neu gestartet werden, sonst werden alle angezeigt operationsRequiringRestart: 6, // operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_DISABLE, get optionsURL() { if (this.isActive && this._script.optionsURL) return this._script.optionsURL; }, get isActive() { return !this.userDisabled? true: false; }, get userDisabled() { return !this.enabled? true: false; }, set userDisabled(val) { if (val == this.userDisabled) { return val; } AddonManagerPrivate.callAddonListeners(val ? 'onEnabling' : 'onDisabling', this, false); if (this.pendingOperations == AddonManager.PENDING_NONE) { this.pendingOperations = val ? AddonManager.PENDING_DISABLE : AddonManager.PENDING_ENABLE; } else { this.pendingOperations = AddonManager.PENDING_NONE; } this.enabled = !val; if (window.userChromejs) { userChromejs.chgScriptStat(this.name); } AddonManagerPrivate.callAddonListeners(val ? 'onEnabled' : 'onDisabled', this); }, get permissions() { // var perms = AddonManager.PERM_CAN_UNINSTALL; // perms |= this.userDisabled ? AddonManager.PERM_CAN_ENABLE : AddonManager.PERM_CAN_DISABLE; var perms = this.userDisabled ? AddonManager.PERM_CAN_ENABLE : AddonManager.PERM_CAN_DISABLE; // if (this.updateURL) perms |= AddonManager.PERM_CAN_UPGRADE; return perms; }, uninstall: function() { AddonManagerPrivate.callAddonListeners("onUninstalling", this, false); this.needsUninstall = true; this.pendingOperations |= AddonManager.PENDING_UNINSTALL; AddonManagerPrivate.callAddonListeners("onUninstalled", this); }, cancelUninstall: function() { this.needsUninstall = false; this.pendingOperations ^= AddonManager.PENDING_UNINSTALL; AddonManagerPrivate.callAddonListeners("onOperationCancelled", this); }, // Fx62.0- enable: function() { this.userDisabled = false; }, disable: function() { this.userDisabled = true; } }; AM_Helper.init(); userChromeJSAddon.init(); function $C(name, attr) { var el = document.createXULElement(name); if (attr) Object.keys(attr).forEach(function(n){ el.setAttribute(n, attr[n])}); return el; } })();
-
Ich will es so formulieren: Sollte Mozilla eine Sicherheits-Richtlinie einführen, die das Setzen dieser Attribute verbietet, was geplant zu sein scheint, aber noch nicht der Fall ist, und sollte diese Richtlinie dann auch dann greifen, wenn die Attribute via JavaScrpit gesetzt werden und nicht nur bei direkter Verwendung im HTML, was gut sein kann, worüber ich mir aber nicht sicher bin, dann muss das entsprechend geändert werden, sobald das passiert. Vorher kann man es ändern, wenn man möchte.
-
Vielen Dank, da das hier bei einigen Scripts vorhanden ist, werde ich es lieber gleich ändern. Wäre dann oben z. B. die Zeilen 480 bis 495
so zu ändern?Code
Alles anzeigenaddEventListener: ` if(event.button == 0) { AM_Helper.revealPath(this.value); } else if (event.button == 2){ AM_Helper.copyToClipboard(this.value); } return false;`, })); } } else { row.appendChild($C("label", { class: "detail-row-value text-link", crop: "end", value: value, href: value, addEventListener: `
also quasi ein 1 zu 1 Austausch?
-
Nein, so nicht. Ich kann's nicht testen, weil nicht einmal der Originalcode bei mir funktioniert, wenn ich ihn in der Konsole so ausführe. Aber versuche es für die Zeilen 472 bis 501 mal damit:
JavaScript
Alles anzeigenif (typeof (value) != "string") { const vbox = row.appendChild($C("vbox")); for (var i = 0; i < value.length; i++) { const el = $C("label", { class: "detail-row-value text-link", crop: "end", value: value[i], href: value[i] }); el.addEventListener("click", event => { if (event.button == 0) { AM_Helper.revealPath(this.value); } else if (event.button == 2) { AM_Helper.copyToClipboard(this.value); } return false; }); vbox.appendChild(el); } } else { const el = $C("label", { class: "detail-row-value text-link", crop: "end", value: value, href: value }) el.addEventListener("click", event => { if (event.button == 2) { AM_Helper.copyToClipboard(this.value); return false; } }); row.appendChild(el); }
-
Hallo alle zusammen und speziell Sören,
Vorher kann man es ändern, wenn man möchte.
wenn das so ist, dann würde ich gerne mal von Euch dort ↓ einen Blick geworfen haben.
JavaScript
Alles anzeigen// 'Vertical Add-on Bar' script for Firefox by Aris // // no 'close' button // 'toggle' toolbar with 'Ctr + Alt + /' on Windows/Linux or 'Cmd + Alt + /' on macOS // optional toggle button hides the toolbar temporarily, it gets restored on every restart // 'Vertical Add-on Bar' entry is only visible in toolbars context menu when in customizing mode // // flexible spaces on toolbar work 'vertically' // toolbar can be on the left or on the right // toolbar is display horizontally in customizing mode // [!] Fix for WebExtensions with own windows by 黒仪大螃蟹 (for 1-N scripts) Components.utils.import("resource:///modules/CustomizableUI.jsm"); ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs"); var AddonbarVertical = { init: function() { if (location != 'chrome://browser/content/browser.xhtml') return; /* blank tab workaround */ try { if(gBrowser.selectedBrowser.getAttribute('blank')) gBrowser.selectedBrowser.removeAttribute('blank'); } catch(e) {} var addonbar_v_label = 'Vertical Add-on Bar'; // toolbar name var button_label = 'Toggle vertical Add-on Bar'; // Toggle button name var addonbar_v_togglebutton = true; // display toggle button for vertical toolbar (true) or not (false) var addonbar_v_on_the_left = false; // display vertical toolbar on the left (true) or the right (false) var style_addonbar_v = true; // apply default toolbar appearance/colors to vertical add-on bar var addonbar_v_width = '22px'; // toolbar width var compact_buttons = true; // compact button size (true) or default button size (false) try { if(document.getElementById('toolbox_abv') == null && document.getElementById('addonbar_v') == null) { var toolbox_abv = document.createXULElement('toolbox'); toolbox_abv.setAttribute('orient','horizontal'); toolbox_abv.setAttribute('id','toolbox_abv'); toolbox_abv.setAttribute('insertbefore','sidebar-box'); var tb_addonbarv = document.createXULElement('toolbar'); tb_addonbarv.setAttribute('id','addonbar_v'); tb_addonbarv.setAttribute('customizable','true'); tb_addonbarv.setAttribute('class','toolbar-primary chromeclass-toolbar browser-toolbar customization-target'); tb_addonbarv.setAttribute('mode','icons'); tb_addonbarv.setAttribute('iconsize','small'); tb_addonbarv.setAttribute('toolboxid','navigator-toolbox'); tb_addonbarv.setAttribute('orient','vertical'); tb_addonbarv.setAttribute('flex','1'); tb_addonbarv.setAttribute('context','toolbar-context-menu'); tb_addonbarv.setAttribute('toolbarname', addonbar_v_label); tb_addonbarv.setAttribute('label', addonbar_v_label); tb_addonbarv.setAttribute('lockiconsize','true'); tb_addonbarv.setAttribute('defaultset','spring'); toolbox_abv.appendChild(tb_addonbarv); CustomizableUI.registerArea('addonbar_v', {legacy: true}); setTimeout(function(){ CustomizableUI.registerArea('addonbar_v', {legacy: true}); },2000); CustomizableUI.registerToolbarNode(tb_addonbarv); if(addonbar_v_on_the_left) { document.getElementById('browser').insertBefore(toolbox_abv,document.getElementById('browser').firstChild); } else { document.getElementById('browser').appendChild(toolbox_abv); } var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { try { if(document.querySelector('#browser').getAttribute('hidden') || document.querySelector('#main-window').getAttribute('customizing')) { document.querySelector('#addonbar_v').setAttribute('orient','horizontal'); document.querySelector('#navigator-toolbox').appendChild(document.querySelector('#addonbar_v')); } else { document.querySelector('#addonbar_v').setAttribute('orient','vertical'); document.querySelector('#toolbox_abv').appendChild(document.querySelector('#addonbar_v')); } } catch(e){} }); }); observer.observe(document.querySelector('#main-window'), { attributes: true, attributeFilter: ['customizing'] }); try { Services.prefs.getDefaultBranch('browser.vaddonbar.').setBoolPref('enabled',true); setToolbarVisibility(document.getElementById('addonbar_v'), Services.prefs.getBranch('browser.vaddonbar.').getBoolPref('enabled')); setToolbarVisibility(document.getElementById('toolbox_abv'), Services.prefs.getBranch('browser.vaddonbar.').getBoolPref('enabled')); } catch(e) {} if(addonbar_v_togglebutton) { CustomizableUI.createWidget({ id: 'togglebutton_addonbar_v', // button id defaultArea: CustomizableUI.AREA_NAVBAR, removable: true, label: button_label, // button title tooltiptext: button_label, // tooltip title onClick: function(event) { if(event.button==0) { var windows = Services.wm.getEnumerator(null); while (windows.hasMoreElements()) { var win = windows.getNext(); var vAddonBar = win.document.getElementById('addonbar_v'); setToolbarVisibility(vAddonBar, vAddonBar.collapsed); var vAddonBarBox = win.document.getElementById('toolbox_abv'); setToolbarVisibility(vAddonBarBox, vAddonBarBox.collapsed); Services.prefs.getBranch('browser.vaddonbar.').setBoolPref('enabled',!vAddonBar.collapsed); if(!vAddonBar.collapsed) win.document.querySelector('#togglebutton_addonbar_v').setAttribute('checked','true'); else win.document.querySelector('#togglebutton_addonbar_v').removeAttribute('checked'); } } }, onCreated: function(button) { if(Services.prefs.getBranch('browser.vaddonbar.').getBoolPref('enabled')) button.setAttribute('checked','true'); return button; } }); } // Press 'Ctr + Alt + /' on Windows/Linux and 'Cmd + Alt + /' on macOS to toggle vertical add-on bar var key = document.createXULElement('key'); key.id = 'key_toggleVAddonBar'; key.setAttribute('key', '/'); key.setAttribute('modifiers', 'accel,alt'); key.setAttribute('oncommand',` var windows = Services.wm.getEnumerator(null); while (windows.hasMoreElements()) { var win = windows.getNext(); var vAddonBar = win.document.getElementById('addonbar_v'); setToolbarVisibility(vAddonBar, vAddonBar.collapsed); var vAddonBarBox = win.document.getElementById('toolbox_abv'); setToolbarVisibility(vAddonBarBox, vAddonBarBox.collapsed); Services.prefs.getBranch('browser.vaddonbar.').setBoolPref('enabled',!vAddonBar.collapsed); if(!vAddonBar.collapsed) win.document.querySelector('#togglebutton_addonbar_v').setAttribute('checked','true'); else win.document.querySelector('#togglebutton_addonbar_v').removeAttribute('checked'); } `); document.getElementById('mainKeyset').appendChild(key); } } catch(e) {} // style toolbar & toggle button var addonbar_v_style = ''; var togglebutton_addonbar_v_style = ''; if(style_addonbar_v) { var end_border =` #addonbar_v { \ border-inline-end: 1px solid var(--sidebar-border-color,rgba(0,0,0,0.1)) !important; \ } \ `; if(!addonbar_v_on_the_left) { end_border =` #addonbar_v { \ border-inline-start: 1px solid #B2B2B2 !important; \ } \ `; } addonbar_v_style =` \ #addonbar_v { \ appearance: none !important; \ background-color: var(--toolbar-bgcolor); \ background-image: var(--toolbar-bgimage); \ background-clip: padding-box; \ color: var(--toolbar-color, inherit); \ padding-bottom: 1px !important; \ } \ :root[lwtheme] #addonbar_v { \ background: var(--lwt-accent-color) !important; \ } \ :root[lwtheme][lwtheme-image='true'] #addonbar_v { \ background: var(--lwt-header-image) !important; \ background-position: 0vw 50vh !important; \ } \ #main-window:not([customizing]) #toolbox_abv:not([collapsed='true']), \ #main-window:not([customizing]) #addonbar_v:not([collapsed='true']) { \ min-width: `+addonbar_v_width+`; \ width: `+addonbar_v_width+`; \ max-width: `+addonbar_v_width+`; \ } \ #main-window[chromehidden='menubar toolbar location directories status extrachrome '] #toolbox_abv:not([collapsed='true']), \ #main-window[chromehidden='menubar toolbar location directories status extrachrome '] #addonbar_v:not([collapsed='true']), \ #main-window[sizemode='fullscreen'] #toolbox_abv:not([collapsed='true']), \ #main-window[sizemode='fullscreen'] #addonbar_v:not([collapsed='true']) { \ min-width: 0px; \ width: 0px; \ max-width: 0px; \ } \ #main-window[customizing] #addonbar_v { \ outline: 1px dashed !important; \ outline-offset: -2px !important; \ } \ #addonbar_v toolbarbutton { \ min-height: 20px !important; \ max-height: 20px !important; \ min-width: 20px !important; \ max-width: 20px !important; \ background-color: #696969 !important; \ margin: 1px 1px 0 1px !important; \ } \ #addonbar_v toolbar .toolbarbutton-1 { \ min-height: 22px !important; \ max-height: 22px !important; \ min-width: 22px !important; \ max-width: 22px !important; \ background-color: #696969 !important; \ margin: 1px 1px 0 1px !important; \ } \ #addonbar_v toolbarbutton:hover, \ #addonbar_v toolbar .toolbarbutton-1:hover { \ background-color: #D1E2F2 !important; \ color: #000 !important; \ fill: #000 !important; \ } \ #addonbar_v toolbarbutton#uc-restart { \ background-color: #F20 !important; \ } \ #addonbar_v toolbarbutton#uc-restart image { \ fill: #FFF !important; \ } \ #addonbar_v toolbarbutton#uc-restart:hover { \ background-color: #D1E2F2 !important; \ } \ #addonbar_v toolbarbutton#uc-restart:hover image { \ fill: #F20 !important; \ } \ #addonbar_v toolbarbutton#privatebrowsing-button { \ background-color: #8000D7 !important; \ } \ #addonbar_v toolbarbutton#privatebrowsing-button image { \ fill: #FFF !important; \ } \ #addonbar_v toolbarbutton#privatebrowsing-button:hover { \ background-color: #D1E2F2 !important; \ } \ #addonbar_v toolbarbutton#privatebrowsing-button:hover image { \ fill: #8000D7 !important; \ } \ #addonbar_v toolbarbutton#restart-button { \ background-color: #F20 !important; \ } \ #addonbar_v toolbarbutton#restart-button:hover { \ background-color: #D1E2F2 !important; \ } \ #addonbar_v #cookieautodelete_kennydo_com-browser-action { \ min-height: 33px !important; \ } \ #addonbar_v #cookieautodelete_kennydo_com-browser-action > .toolbarbutton-badge-stack { \ margin-top: -13px !important; \ } \ #addonbar_v #cookieautodelete_kennydo_com-browser-action > .toolbarbutton-badge-stack .toolbarbutton-badge { \ min-width: 18px !important; \ border-radius: 0px !important; \ margin-top: 20px !important; \ margin-right: 1px !important; \ } \ #addonbar_v #cookieautodelete_kennydo_com-browser-action:hover > .toolbarbutton-badge-stack .toolbarbutton-badge { \ background-color: #D1E2F2 !important; \ color: #000 !important; \ } \ #addonbar_v > toolbarbutton#restart-button .toolbarbutton-icon { \ margin: 3px !important; \ } \ #addonbar_v > toolbarbutton#print-toolbarbutton { \ border-radius: 0 !important; \ border: 0 !important; \ background-color: #696969 !important; \ } \ #addonbar_v > toolbarbutton#print-toolbarbutton:hover { \ background-color: #D1E2F2 !important; \ } \ #unified-extensions-button[hidden]{ \ visibility: visible !important; \ display: flex !important; \ } \ #addonbar_v toolbaritem separator { \ display: none !important; \ } \ #main-window:not([customizing]) #addonbar_v > toolbaritem { \ writing-mode: vertical-rl !important; \ text-orientation: mixed !important; \ transform: rotate(0deg) !important; \ } \ #main-window:not([customizing]) #addonbar_v > toolbaritem menupopup { \ max-height: 170px !important; \ max-width: 170px !important; \ transform: rotate(-90deg) !important; \ } \ #main-window:not([customizing]) #addonbar_v > toolbaritem .toolbarbutton-badge { \ transform: rotate(-90deg) !important; \ position: absolute !important; \ padding: 1px 2px !important; \ top: -4px !important; \ } \ #main-window:not([customizing]) #addonbar_v #search-container, \ #main-window:not([customizing]) #addonbar_v #wrapper-search-container { \ flex: unset !important; \ } \ #main-window:not([customizing]) #addonbar_v #search-container { \ min-width: unset !important; \ width: unset !important; \ height: 100px !important; \ &[width] { \ flex: unset !important; \ } \ } \ #main-window:not([customizing]) #addonbar_v #zoom-reset-button > .toolbarbutton-text { \ min-width: unset !important; \ min-height: unset !important; \ } \ #main-window:not([customizing]) #addonbar_v #zoom-reset-button:not([label]) { \ display: none !important; \ } \ #main-window:not([customizing]) #addonbar_v .toolbarbutton-combined-buttons-dropmarker > .toolbarbutton-icon { \ width: unset !important; \ height: 16px !important; \ } \ `+end_border+` `; } var addonbar_right = ''; if(!addonbar_v_on_the_left) { addonbar_right =` #toolbox_abv{ \ order: 10 !important; \ } \ `; } if(addonbar_v_togglebutton) { togglebutton_addonbar_v_style =` #togglebutton_addonbar_v .toolbarbutton-icon { \ list-style-image: url('chrome://browser/skin/sidebars.svg'); \ fill: green; \ } \ /*#togglebutton_addonbar_v .toolbarbutton-icon { \ list-style-image: url('chrome://browser/skin/forward.svg'); \ fill: red; \ } \ #togglebutton_addonbar_v[checked] .toolbarbutton-icon { \ fill: green; \ } \ #togglebutton_addonbar_v { \ background: url('chrome://browser/skin/back.svg') no-repeat; \ background-size: 35% !important; \ background-position: 10% 70% !important; \ } \ #togglebutton_addonbar_v[checked] { \ transform: rotate(180deg) !important; \ background: url('chrome://browser/skin/back.svg') no-repeat; \ background-position: 10% 30% !important; \ }*/ \ `; } var compact_buttons_code = ''; if(compact_buttons) compact_buttons_code = ` #addonbar_v toolbarbutton .toolbarbutton-icon { \ padding: 0 !important; \ width: 16px !important; \ height: 16px !important; \ } \ #addonbar_v .toolbarbutton-badge-stack { \ padding: 0 !important; \ margin: 0 !important; \ width: 16px !important; \ min-width: 16px !important; \ height: 16px !important; \ min-height: 16px !important; \ } \ #addonbar_v toolbarbutton .toolbarbutton-badge { \ margin-top: 0px !important; \ font-size: 8px !important; \ } \ `; var uri = Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(''+addonbar_v_style + togglebutton_addonbar_v_style + addonbar_right + compact_buttons_code), null, null); var sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); } } /* initialization delay workaround */ document.addEventListener('DOMContentLoaded', AddonbarVertical.init(), false); /* Use the below code instead of the one above this line, if issues occur */ /* setTimeout(function(){ AddonbarVertical.init(); },2000); */
Nach meinem Editor ist oncklick ab Zeile 108 zu finden.
Ich hoffe es wird sich jemand finden bzw. erbarmen und dieses Script für die Zeit nach oncklick lauffähig zu halten, ich danke schon einmal vorab dafür.
-
Dharkness Soweit ich Sörens Erklärungen verstanden habe, muss in diesem Fall nichts geändert werden,
da ja eine Funktion definiert ist.Die Erklärung ist vielleicht doof. Sorry.
-
Zeile 108 passt, da es die onClick-Methode der CustomizableUI.createWidget-API ist. Aber die Zeilen 142-155 setzen ein entsprechendes Attribut für ein XUL-Element und können hiermit ersetzt werden:
JavaScript
Alles anzeigenkey.addEventListener('command', () => { var windows = Services.wm.getEnumerator(null); while (windows.hasMoreElements()) { var win = windows.getNext(); var vAddonBar = win.document.getElementById('addonbar_v'); setToolbarVisibility(vAddonBar, vAddonBar.collapsed); var vAddonBarBox = win.document.getElementById('toolbox_abv'); setToolbarVisibility(vAddonBarBox, vAddonBarBox.collapsed); Services.prefs.getBranch('browser.vaddonbar.').setBoolPref('enabled',!vAddonBar.collapsed); if(!vAddonBar.collapsed) win.document.querySelector('#togglebutton_addonbar_v').setAttribute('checked','true'); else win.document.querySelector('#togglebutton_addonbar_v').removeAttribute('checked'); } });
-
Aber die Zeilen 142-155 setzen ein entsprechendes Attribut für ein XUL-Element und können hiermit ersetzt werden:
Von Dir vorgeschlagen und von mir so getan und funktioniert, Dankeschön.
-