Also nochmals vielen Dank.
Hallo Mira, war wie immer gern geschehen
einen "echten" Separator per JavaScript platzieren.
Aber Dein CSS war richtig Gold wert
Also nochmals vielen Dank.
Hallo Mira, war wie immer gern geschehen
einen "echten" Separator per JavaScript platzieren.
Aber Dein CSS war richtig Gold wert
Werde aber, wenn überhaupt, erst weitermachen, wenn mir Boersenfeger auf meine Frage antwortet.
Hi, wie in #390 geschrieben, ist das Script, das ich zur Diskussion gestellt hatte, nicht das, was mir Pein bereitete, sondern Firefox_ToolBarButtons.uc.js, das ich nach Hinweis von 2002Andreas aktualisiert habe und in #392 bestätigte, dass nun mein Begehr erfüllt sei.
Die optimale Variante von UndoListInTabmenuToo.uc.js sieht für mich so aus.
(etc.) Kannst Du das bitte selbst bei GitHub eintragen oder hier auf Englisch noch einmal aufschreiben? Ich würde im letzteren Fall dann darauf verweisen.
- Die Breite der Dropdown-Liste der geschlossenen Tabs muss vergrößert werden, sie ist 3-4cm kleiner als bei der „Undo Cloae Tab 8.0.0“-Erweiterung und das ist unbequem.
Ich halte es nicht für zu schmal, bei mir werden etwa 60 Zeichen angezeigt (schwankt, weil keine Festbreitenschrift).
Wer sich das Skript anschauen möchte:
Such darin nach \u00FC und ersetze es durch ü sowie nach \u00F6 und ersetze dies durch ö (gibts jeweils 2x) – im Skript sind jetzt schon Umlaute enthalten., so dass die Kodierung keinen Vorteil bringt.
Wer sich das Skript anschauen möchte:
Such darin nach \u00FC und ersetze es durch ü sowie nach \u00F6 und ersetze dies durch ö (gibts jeweils 2x) – im Skript sind jetzt schon Umlaute enthalten., so dass die Kodierung keinen Vorteil bringt.
Gar net! Sind gar keine Buchstabenkodierungen enthalten, net eine.
// ==UserScript==
// @name Appmenu.uc.js
// @namespace Appmenu@gmail.com
// @description Basiert auf dem Script externalFuncButtonM.uc.js, Wiederherstellung der Orangenen FF-Menü Schaltfläche
// @include main
// @version update for Firefox 68+ by aborix
// @author defpt
// @charset UTF-8
// @version 2019.08.04
// @version 2020.05.27
// @version 2020.07.13 Weitere Menüs und Funktionen ergänzt by bege
// @version 2024.08.10 alle Einstellungen im Abschnitt Konfiguration vornehmen
// @version 2024.08.18 einige Veränderungen am Skript, Symbole, Funktionen & Menüs by Mira Bellenbaum
// @version 2025.01.15 EventListener korrigiert und angepasst, by Mira Bellenbaum
// ==/UserScript==
// Definiere den Profilpfad
let ProfilePath = PathUtils.toFileURI(
PathUtils.join(PathUtils.profileDir, "chrome", "icons")
);
var Appmenu = {
// Beginn der Konfiguration ------------------
// Editor mit angegebenem Pfad verwenden
// editor: 'C:\\Program Files\\Notepad++\\notepad++.exe',
editor: "C:\\Program Files\\Microsoft VS Code\\Code.exe",
// oder
// in 'view_source.editor.path' eingetragenen Editor verwenden
editor: Services.prefs.getCharPref("view_source.editor.path"),
// Dateimanager mit angegebenem Pfad verwenden oder leer ('') wenn System-Dateimanager verwenden
//fileManager: 'C:\\Program files\\FreeCommander XE\\FreeCommander.exe',
fileManager: "",
// Parameter für Dateimanager oder leer ('')
//FMParameter: '/T',
FMParameter: "",
// Submenüs ohne Inhalt im Hauptmenü automatisch ausblenden
autohideEmptySubDirs: true,
// Submenüs im Hauptmenü nach unten verschieben
moveSubDirstoBottom: false,
// Ort und Aussehen des Menü-Buttons einstellen
// isUrlbar: 1, // 0: TabsToolbar; 1: navbar,
isUrlbar: 2, // 0: TabsToolbar; 1: navbar; 2: toolbar-menubar
isButton: 0, // 0: Hamburger,klein; 1: Firefox,groß,
// Hotkey zum Öffnen des Appmenüs oder leer ('')
hotkey: "x",
hotkeyModifier: "alt",
// Ende der Konfiguration --------------------
// Submenüs im Hauptmenü nach unten verschieben
subdirPopupHash: [],
subdirMenuHash: [],
toolbar: {
// Submenüs des Hauptmenüs definieren; Separator einfügen mit {name: 'separator'}
subdirs: [
{
name: "Firefox Verzeichnisse",
image: `${ProfilePath}/folder_currentColor.svg`, // Der Pfad wird direkt verwendet, ohne `url()`
},
{
name: "Firefox Funktionen",
image: `${ProfilePath}/settings_currentColor.svg`, // Der Pfad wird direkt verwendet, ohne `url()`
},
{
name: "separator",
},
],
apps: [
// Untermenü Firefox Verzeichnisse
{
name: 'Profil-Verzeichniss',
id: "AMProfil",
root: 'ProfD',
path: '\\',
subdir: 'Firefox Verzeichnisse',
},
{
name: 'Chrome-Ordner',
id: "AMchrome",
root: 'ProfD',
path: '\\chrome',
subdir: 'Firefox Verzeichnisse',
},
{
name: 'CSS-Ordner',
id: "AMCSS",
root: 'ProfD',
path: '\\chrome\\css',
subdir: 'Firefox Verzeichnisse',
},
{
name: 'JS-Ordner',
id: "AMJS",
root: 'ProfD',
path: '\\chrome\\scripts',
subdir: 'Firefox Verzeichnisse',
},
{
name: 'Addon-Verzeichniss',
id: "AMAddons",
root: 'ProfD',
path: '\\extensions',
subdir: 'Firefox Verzeichnisse',
},
{
name: 'Programm-Verzeichniss',
id: "AMProgramm",
root: 'CurProcD',
path: '\\',
subdir: 'Firefox Verzeichnisse',
},
{
name: 'Startup-Cache',
id: "AMCache",
root: 'ProfLD',
path: '\\startupCache',
subdir: 'Firefox Verzeichnisse',
},
],
configs: [
// Untermenü Firefox Funktionen
{
name: 'Anpassen',
id: "AMAnpassen",
command: "gCustomizeMode.enter()",
subdir: 'Firefox Funktionen',
},
{
name: "Neustart im abgesicherten Modus",
id: "AMModus",
command: "safeModeRestart();",
subdir: "Firefox Funktionen",
},
{
name: "Browser-Konsole",
id: "AMKonsole",
command:
"var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager');\
BrowserConsoleManager.openBrowserConsoleOrFocus();",
subdir: "Firefox Funktionen",
},
{
name: "Browser-Werkzeuge",
id: "AMWerkzeuge",
command:
"var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
var { BrowserToolboxLauncher } = require('resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs');\
BrowserToolboxLauncher.init();",
subdir: "Firefox Funktionen",
},
{
name: "Web-Entwickler",
id: "AMEntwickler",
command:
"var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\
var { gDevToolsBrowser } = require('resource://devtools/client/framework/devtools-browser');\
gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now());",
subdir: "Firefox Funktionen",
},
{
name: "Firefox synchronisieren",
id: "AMsynchron",
command: "gSync.openPrefs('menubar');",
subdir: "Firefox Funktionen",
},
{
name: "Zugangsdaten und Passwörter",
id: "AMdaten",
command:
"LoginHelper.openPasswordManager(window, { entryPoint: 'mainmenu' })",
tooltiptext: "about:logins",
subdir: "Firefox Funktionen",
},
{
name: "Task Manager",
id: "AMManager",
command: "switchToTabHavingURI('about:processes', true)",
tooltiptext: "about:processes",
subdir: "Firefox Funktionen",
},
{
name: "Offline arbeiten",
id: "AMOffline",
command: "BrowserOffline.toggleOfflineStatus();",
subdir: "Firefox Funktionen",
},
/*
{
name: 'separator',
},
*/
{
name: 'Neustart',
id: 'AMreboot',
tooltiptext: 'userChrome.js-Cache wird geleert',
command:"Services.appinfo.invalidateCachesOnRestart(); \
Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);",
},
{
name: 'Beenden',
id: 'AMquit',
command: "goQuitApplication(event);",
},
]
},
_externalAppPopup: null,
_isready: false,
init: function() {
this.handleRelativePath(this.toolbar.apps);
const XULNS = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
var ExternalAppBtn = document.createElementNS(XULNS, 'toolbarbutton');
ExternalAppBtn.id = "AppMenuButton";
ExternalAppBtn.setAttribute("label", "AppButton");
//ExternalAppBtn.setAttribute("onclick", "event.preventDefault();event.stopPropagation();");
ExternalAppBtn.addEventListener('click', event => {
event.preventDefault();
event.stopPropagation();
});
ExternalAppBtn.setAttribute("tooltiptext", "Firefox Menü");
ExternalAppBtn.setAttribute("type", "menu");
ExternalAppBtn.setAttribute("removable", "true");
// Definiere den Profilpfad
let ProfilePath = PathUtils.toFileURI(
PathUtils.join(PathUtils.profileDir, "chrome", "image")
);
// Symbole
let DefaultIcon = "Button_groß.png";
let AlternateIcon = "Button_klein-plus.png";
if (Appmenu.isButton) {
ExternalAppBtn.style.listStyleImage = `url('${ProfilePath}/${DefaultIcon}')`; // Großes Symbol
ExternalAppBtn.style.width = "94px"; // Feste Breite für großes Symbol
ExternalAppBtn.style.height = "24px"; // Feste Höhe für großes Symbol
} else {
ExternalAppBtn.style.listStyleImage = `url('${ProfilePath}/${AlternateIcon}')`; // Kleines Symbol
ExternalAppBtn.style.width = "16px"; // Feste Breite für kleines Symbol
ExternalAppBtn.style.height = "21px"; // Feste Höhe für kleines Symbol
}
if (Appmenu.isUrlbar === 1) {
var navBar = document.getElementById("nav-bar-customization-target");
navBar.insertBefore(ExternalAppBtn, navBar.firstChild);
} else if (Appmenu.isUrlbar === 2) {
var menubar = document.getElementById("toolbar-menubar");
menubar.insertBefore(ExternalAppBtn, menubar.firstChild);
} else {
var TabsToolbar = document.getElementById("TabsToolbar");
TabsToolbar.insertBefore(ExternalAppBtn, TabsToolbar.firstChild);
}
var ExternalAppPopup = document.createElementNS(XULNS, 'menupopup');
//ExternalAppPopup.setAttribute('onpopupshowing', 'event.stopPropagation(); Appmenu.onpopupshowing();');
ExternalAppPopup.addEventListener('click', event => {
event.stopPropagation();
});
ExternalAppPopup.setAttribute('id', 'AMpopup');
this._externalAppPopup = ExternalAppPopup;
ExternalAppBtn.appendChild(ExternalAppPopup);
Appmenu.onpopupshowing();
// Menü mit Tastaturkürzel öffnen
if (Appmenu.hotkey) {
let key = document.createXULElement('key');
key.id = 'key_AppMenuPopup';
key.setAttribute('key', Appmenu.hotkey);
if (Appmenu.hotkeyModifier)
key.setAttribute('modifiers', Appmenu.hotkeyModifier);
key.setAttribute('oncommand', 'document.getElementById("AMpopup").openPopup();');
document.getElementById('mainKeyset').appendChild(key);
}
},
onpopupshowing: function() {
if (this._isready) return;
if (this._externalAppPopup === null) return;
var ExternalAppPopup = this._externalAppPopup;
for (let subdir of this.toolbar.subdirs) {
if (subdir.name == 'separator') {
ExternalAppPopup.appendChild(document.createXULElement('menuseparator'));
} else {
var subdirItem = ExternalAppPopup.appendChild(document.createXULElement('menu'));
var subdirItemPopup = subdirItem.appendChild(document.createXULElement('menupopup'));
subdirItem.setAttribute('class', 'menu-iconic');
subdirItem.setAttribute('label', subdir.name);
subdirItem.setAttribute('image', subdir.image);
Appmenu.subdirPopupHash[subdir.name] = subdirItemPopup;
Appmenu.subdirMenuHash[subdir.name] = subdirItem;
}
}
for (let app of this.toolbar.apps) {
var appItem;
if (app.name == 'separator') {
appItem = document.createXULElement('menuseparator');
} else {
appItem = document.createXULElement('menuitem');
appItem.setAttribute('class', 'menuitem-iconic');
appItem.setAttribute('label', app.name);
appItem.setAttribute('image', app.image);
//appItem.setAttribute('oncommand', "Appmenu.exec(this.path, this.args);");
appItem.addEventListener('command', function () {
Appmenu.exec(this.path, this.args);
});
appItem.setAttribute('tooltiptext', app.name);
appItem.path = app.path;
appItem.args = app.args;
}
if (app.subdir && Appmenu.subdirPopupHash[app.subdir])
Appmenu.subdirPopupHash[app.subdir].appendChild(appItem);
else ExternalAppPopup.appendChild(appItem);
}
for (let config of this.toolbar.configs) {
var configItem;
if (config.name == 'separator') {
configItem = document.createXULElement('menuseparator');
} else {
configItem = ExternalAppPopup.appendChild(document.createXULElement('menuitem'));
configItem.setAttribute('class', 'menuitem-iconic');
configItem.setAttribute('label', config.name);
configItem.setAttribute('image', config.image);
//configItem.setAttribute('oncommand', config.command);
configItem.addEventListener('command', () => {
eval(config.command);
});
if (config.tooltiptext) {
configItem.setAttribute('tooltiptext', config.tooltiptext);
} else {
configItem.setAttribute('tooltiptext', config.name);
}
configItem.setAttribute('id', config.id);
}
if (config.subdir && Appmenu.subdirPopupHash[config.subdir]) {
Appmenu.subdirPopupHash[config.subdir].appendChild(configItem);
} else {
ExternalAppPopup.appendChild(configItem);
}
}
if (this.autohideEmptySubDirs) {
for (let i = 0; i < Appmenu.subdirPopupHash.length; i++) {
if (Appmenu.subdirPopupHash[i].hasChildNodes()) {
continue;
} else {
Appmenu.subdirMenuHash[i].setAttribute("hidden", "true");
}
}
}
if (this.moveSubDirstoBottom) {
let i = ExternalAppPopup.childNodes.length;
while (ExternalAppPopup.firstChild.getAttribute('class') != 'menuitem-iconic' && i-- != 0) {
ExternalAppPopup.appendChild(ExternalAppPopup.firstChild);
}
}
this._isready = true;
},
handleRelativePath: function(apps) {
for (let app of apps) {
if (app.path) {
app.path = app.path.replace(/\//g, '\\');
var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get(app.root, Ci.nsIFile).path;
if (/^(\\)/.test(app.path)) {
app.path = ffdir + app.path;
}
}
}
},
exec: function(path, args) {
args = args || [];
var args_t = args.slice(0);
for (let arg of args_t) {
arg = arg.replace(/%u/g, gBrowser.currentURI.spec);
}
var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
file.initWithPath(path);
if (!file.exists()) {
//Cu.reportError('Datei nicht gefunden: ' + path);
alert('Datei nicht gefunden: ' + path);
return;
}
if (file.isExecutable() && !path.endsWith('.js')) {
var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, args_t, args_t.length);
} else if (file.isFile()) {
if (this.editor) {
let UI = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
UI.charset = window.navigator.platform.toLowerCase().includes('win') ? 'Shift_JIS' : 'UTF-8';
let path = UI.ConvertFromUnicode(file.path);
let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
app.initWithPath(this.editor);
let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(app);
process.run(false, [path], 1);
} else {
file.launch();
}
} else if (file.isDirectory()) {
if (this.fileManager) {
let args=[this.FMParameter,path];
let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
app.initWithPath(this.fileManager);
let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(app);
process.run(false, args, args.length);
} else {
file.launch();
}
}
},
};
(function () {
// Definiere den Profilpfad für die Symbole
let ProfilePath = PathUtils.toFileURI(
PathUtils.join(PathUtils.profileDir, "chrome", "icons")
);
// Standard-Symbol-Dateiname
let ButtonIcon01 = "restart.svg";
let ButtonIcon02 = "quit.svg";
let Icon01 = "profile.svg";
let Icon02 = "chrome.svg";
let Icon03 = "css3.svg";
let Icon04 = "js.svg";
let Icon05 = "addons.svg";
let Icon06 = "folder.svg";
let Icon07 = "folder-1.svg";
let Icon11 = "Themes.svg";
let Icon12 = "debugging-workers.svg";
let Icon13 = "command-console.svg";
let Icon14 = "window-dev-tools.svg";
let Icon15 = "developer.svg";
let Icon16 = "sync.svg";
let Icon17 = "passwords.svg";
let Icon18 = "performance.svg";
let Icon19 = "plug-disconnected.svg";
// StyleSheetService zum Hinzufügen der CSS-Regeln
let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
let uri = Services.io.newURI(
"data:text/css;charset=utf-8," +
encodeURIComponent(`
menuitem[label="Profil-Verzeichniss"] { background-image: url('${ProfilePath}/${Icon01}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important; /* Größe des Symbols anpassen */
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
menuitem[label="Chrome-Ordner"] { background-image: url('${ProfilePath}/${Icon02}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important; /* Größe des Symbols anpassen */
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
menuitem[label="CSS-Ordner"] { background-image: url('${ProfilePath}/${Icon03}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important; /* Größe des Symbols anpassen */
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
menuitem[label="JS-Ordner"] { background-image: url('${ProfilePath}/${Icon04}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important; /* Größe des Symbols anpassen */
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
menuitem[label="Addon-Verzeichniss"] { background-image: url('${ProfilePath}/${Icon05}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16pxx !important; /* Größe des Symbols anpassen */
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
menuitem[label="Programm-Verzeichniss"] { background-image: url('${ProfilePath}/${Icon06}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important; /* Größe des Symbols anpassen */
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
menuitem[label="Startup-Cache"] { background-image: url('${ProfilePath}/${Icon07}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important; /* Größe des Symbols anpassen */
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
#AMAnpassen { background-image: url('${ProfilePath}/${Icon11}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important;
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
#AMModus { background-image: url('${ProfilePath}/${Icon12}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important;
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
#AMKonsole { background-image: url('${ProfilePath}/${Icon13}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important;
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
#AMWerkzeuge { background-image: url('${ProfilePath}/${Icon14}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important;
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
#AMEntwickler { background-image: url('${ProfilePath}/${Icon15}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important;
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
#AMsynchron { background-image: url('${ProfilePath}/${Icon16}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important;
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
#AMdaten { background-image: url('${ProfilePath}/${Icon17}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important;
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
#AMManager { background-image: url('${ProfilePath}/${Icon18}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important;
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
#AMOffline { background-image: url('${ProfilePath}/${Icon19}');
background-repeat: no-repeat !important;
background-position: 11px 3px !important;
background-size: 16px 16px !important;
-moz-context-properties: fill, fill-opacity;
fill: currentColor;
}
/* Neustart-Button */
#AMreboot {
background-image: url('${ProfilePath}/${ButtonIcon01}');
background-repeat: no-repeat !important;
background-position: 10px 2px !important;
background-size: 20px 20px !important; /* Größe des Symbols anpassen */
padding-left: 10px !important; /* Platz für das Symbol lassen */
-moz-context-properties: fill, fill-opacity !important;
fill: #fbc96e !important;
}
/* Beenden-Button */
#AMquit {
background-image: url('${ProfilePath}/${ButtonIcon02}');
background-repeat: no-repeat !important;
background-position: 12px 3px !important;
background-size: 16px 16px !important; /* Größe des Symbols anpassen */
padding-left: 10px !important; /* Platz für das Symbol lassen */
-moz-context-properties: fill, fill-opacity !important;
fill: red !important;
}
`),
null,
null
);
// CSS-Regeln registrieren
sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
})();
if (window.gBrowser) Appmenu.init();
Alles anzeigen
Hi, wie in #390 geschrieben
Das habe ich zwischenzeitlich auch gelesen. Also gehe ich davon aus, dass du das besagte Skript auch nicht mehr nutzt und daher wandert es jetzt in Ablage P bei mir, da es eh noch nicht richtig funktioniert hat . Endor hat ja Alice eine Mail zukommen lassen, vielleicht meldet er sich und hat eine Lösung parat...
Alice wird antworten sobald er eine funktionierende Version hat.
Geduld ist angesagt.
Mfg.
Endor
Speravir Danke für das Angebot der Hilfe. Die Meinung des Benutzers ist nur ein Wunsch. Möge Alice0775 mehr Zeit haben, um Bugs zu beheben.
Nur zur Information, beachten Sie, wie viel informativer die Erweiterung Dropdown-Menü (oben) ist im Vergleich zu dem Skript (unten).
Hi lenny2
Versuche einmal CSS in das Skript zu basteln!
Dann kannst Du bestimmen, wie breit das Submenü und die "Texte" sein sollen!
Schau Dir mein angepasstes Skript an.
// ==UserScript==
// @name UndoListInTabmenuToo
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description UndoListInTabmenuToo.uc.js
// @include main
// @compatibility Firefox 135
// @author Alice0775
// @version 2025/01/19 width of the submenu adjusted via CSS, by Mira Bellenbaum
// @version 2025/01/18 fix bug via CSS thanks 2002Andreas
// @version 2025/01/15 fix bug by Mira Bellenbaum (Tooltips deleted because incorrect)
// @version 2025/01/05 remove redundant menuitems
// @version 2025/01/05 fix bug
// @version 2024/12/22 fix Bug 1936336 - Disallow inline event handlers
// @version 2024/08/23 Bug 1690613 - Allow access to url/title/favIconUrl without "tabs" permission in session API
// @version 2023/06/16 08:00 Bug 1819675 - Expand recently closed tabs to include all Windows
// @version 2022/05/10 fix ref to context-media-eme-separator
// @version 2021/12/09 remove JSON.parse (Bug 1733425)
// @version 2021/04/25 fix 1689378
// @version 2019/11/14 remove eval
// @version 2019/06/30 10:00 Bug 1555060 Convert <tabs> to a custom element
// @version 2019/06/24 23:00 wait for gBrowser initialized
// @version 2019/05/21 08:30 fix 69.0a1 Bug 1551320 - Replace all createElement calls in XUL documents with createXULElement
// @version 2018/05/10 60
// @version 2017/11/18 nsIPrefBranch to nsIPrefBranch
// @version 2010/09/18 00:00 4.0b7pre
// @version 2009/02/03 13:00 Tooltip zeigt jetzt den Verlauf in Tabs an
// @Note Fügt die UndoClose Tab List für Tabs und Kontextmenüs hinzu
// @OriginalCode Orginalcode aus browser.js für populateUndoSubmenu verwendet
// @version 2018/05/09 15:00 61
// ==/UserScript==
// @version 2010/03/26 13:00 Minefield/3.7a4pre Bug 554991 - allow tab context menu to be modified by normal XUL overlays
// @version 2010/03/15 00:00 Minefield/3.7a4pre Bug 347930 - Tab strip should be a toolbar instead
// @version 2009/09/09 15:00 Mittlere Klickverarbeitung
// @version 2009/09/03 22:00 Firefox3.7a1pre Funktion wurde wieder hergestellt.(Bug 489925. getElementById should not return anonymous nodes)
// @version 2009/08/22 00:00 Firefox3.6 Ändern des stringbandle
// @version 2009/04/24 00:00 #394759 [Firefox:Session Restore]-Add undo close window feature
// @version 2008/10/12 18:00 FFx3.0.4pre Mittelklick-Popupmenü wurde nicht geschlossen und andere Korrekturen
// @version 2007/10/05 10:00
var UndoListInTabmenu = {
// -- config --
TABCONTEXTMENU : true , //Im Tabkontextmenü: anzeigen: true, nicht anzeigen: false
CONTEXTMENU : false, //Im Hauptkontextmenü: anzeigen: true , nicht anzeigen: false
// -- config end--
ss: null,
get tabContext() {
return document.getElementById("tabContextMenu");
},
get navigatorBundle() {
return Services.strings.createBundle(
"chrome://browser/locale/browser.properties"
);
},
init: function(){
var css =`
.restoreallitem {
order: -1 !important;
}
#tabContextUndoList :is(menu,menuitem),
#ContextUndoList :is(menu,menuitem) {
min-height: 20px !important;
padding-top: 0 !important;
padding-bottom: 0 !important;
}
#tabContextUndoList > menupopup:nth-child(4) {
min-width: 500px !important;
}
#tabContextUndoList :is(menu, menuitem) {
min-width: 550px !important;
}
`;
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
if (this.TABCONTEXTMENU){
//Tabkontextmenü
var tabContext = this.tabContext;
this.makePopup(tabContext, null, "tabContextUndoList");
}
if (this.CONTEXTMENU){
//Hauptkontextmenü
var contextMenu = document.getElementById("contentAreaContextMenu");
var refItem = document.getElementById("context-media-eme-separator");
this.makePopup(contextMenu, refItem, "ContextUndoList");
}
// Geschlossene Tabs dem NS-Sitzungsspeicher entnehmen
this._ss = SessionStore;
},
makePopup: function(popup, refItem, id){
var menu;
//label
const locale = "de";
// "Liste Kürzlich geschlossener Fenster"
menu = document.createXULElement("menu");
menu.setAttribute("id", "historyUndoWindowMenu3");
menu.setAttribute("label", "K\u00FCrzlich geschlossene Fenster");
menu.setAttribute("accesskey", "F");
menu.setAttribute("disabled", "true");
popup.insertBefore(menu, refItem);
menupopup = document.createXULElement("menupopup");
menu.appendChild(menupopup);
menupopup.setAttribute("id", "historyUndoWindowPopup3");
//menu.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoWindowSubmenu(this);");
menupopup.addEventListener("popupshowing", (event) => UndoListInTabmenu.populateUndoWindowSubmenu(event.currentTarget));
//Liste kürzlich geschosener Tabs
const LABELTEXT = "K\u00FCrzlich geschlossene Tabs"; //create menu
menu = document.createXULElement("menu");
menu.setAttribute("label", LABELTEXT);
menu.setAttribute("accesskey", "K");
if (id)
menu.setAttribute("id", id);
//menu.setAttribute("disabled", true);
var menupopup = document.createXULElement("menupopup");
menupopup.addEventListener("popupshowing", () => UndoListInTabmenu.populateUndoSubmenu(menupopup));
//menupopup.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoSubmenu(this);");
menu.appendChild(menupopup);
popup.insertBefore(menu, refItem);
//Eventlistener hinzufügen
popup.addEventListener('popupshowing',function(event) {
UndoListInTabmenu.toggleRecentlyClosedWindows(document.getElementById("historyUndoWindowMenu3"));
// no restorable tabs, so make sure menu is disabled, and return
if (UndoListInTabmenu._ss.getClosedTabCount(window) === 0) {
menu.setAttribute("disabled", true);
//menu.setAttribute("hidden", true);
return;
}
menu.removeAttribute("disabled");
//menu.setAttribute("hidden", false);
},false);
},
/**
* Auffüllen, wenn das Chronik-Menü geöffnet wird
*/
populateUndoSubmenu: function(undoPopup) {
while (undoPopup.hasChildNodes()) {
undoPopup.removeChild(undoPopup.firstChild);
}
var utils = RecentlyClosedTabsAndWindowsMenuUtils;
var tabsFragment = utils.getTabsFragment(
window,
"menuitem",
/* aPrefixRestoreAll = */ true,
"menu-history-reopen-all-tabs"
);
undoPopup.appendChild(tabsFragment);
// Erstelle einen Separator unter dem Eintrag "Alle Tabs wieder öffnen"
let separator = document.createXULElement("menuseparator");
separator.classList.add("restoreall-separator");
undoPopup.insertBefore(separator, undoPopup.children[0]); // Direkt nach dem ersten Eintrag ("Alle Tabs wieder öffnen")
// populate tab historis for tooltip
// var undoItems = UndoListInTabmenu._ss.getClosedTabDataForWindow(window);
// for (var i = 0; i < undoItems.length; i++) {
// var entries = undoItems[i].state ? undoItems[i].state.entries : undoItems[i].entries;
// var tooltiptext = "";
// for (var j = entries.length - 1; j > -1; j--){
// if (j != entries.length - 1)
// tooltiptext += "\n";
// tooltiptext += parseInt(j + 1, 10) + ". " + entries[j].title;
// }
// undoPopup.childNodes[i + 2/*restore all, sep*/].setAttribute("tooltiptext", tooltiptext);
// }
// "Append Clear undo close tb list"
//undoPopup.appendChild(document.createXULElement("menuseparator"));
// "Liste der letzten Tabs löschen"-Eintrag hinzufügen
let clearListItem = undoPopup.appendChild(document.createXULElement("menuitem"));
clearListItem.setAttribute("label", "Liste der letzten Tabs l\u00F6schen");
clearListItem.setAttribute("accesskey", "C");
clearListItem.addEventListener("command", () => {
let prefs = Services.prefs;
let max_undo = prefs.getIntPref("browser.sessionstore.max_tabs_undo");
prefs.setIntPref("browser.sessionstore.max_tabs_undo", 0);
prefs.setIntPref("browser.sessionstore.max_tabs_undo", max_undo);
}, false);
},
toggleRecentlyClosedWindows: function PHM_toggleRecentlyClosedWindows(menu) {
// enable/disable the Recently Closed Windows sub menu
// no restorable windows, so disable menu
if (this._ss.getClosedWindowCount() === 0)
menu.setAttribute("disabled", true);
else
menu.removeAttribute("disabled");
},
/**
* Populate when the history menu is opened
*/
populateUndoWindowSubmenu: function PHM_populateUndoWindowSubmenu(undoPopup) {
while (undoPopup.hasChildNodes()) {
undoPopup.removeChild(undoPopup.firstChild);
}
let utils = RecentlyClosedTabsAndWindowsMenuUtils;
let windowsFragment = utils.getWindowsFragment(
window,
"menuitem",
/* aPrefixRestoreAll = */ true,
"menu-history-reopen-all-windows"
);
undoPopup.appendChild(windowsFragment);
undoPopup.firstChild.setAttribute("accesskey", "R");
// "Append Clear undo close window list"
undoPopup.appendChild(document.createXULElement("menuseparator"));
m = undoPopup.appendChild(document.createXULElement("menuitem"));
m.setAttribute("label", "Liste der kürzlich geschlossenen Fenster l\u00F6schen");
m.setAttribute("accesskey", "C");
m.addEventListener("command", () => {
for (let i = SessionStore.getClosedWindowCount() -1; i >= 0; i--)
SessionStore.forgetClosedWindow(i);
}, false);
}
};
// Wir sollten die Umleitung nur starten, wenn das Browser-Fenster den Startvorgang abgeschlossen hat.
// Andernfalls sollten wir warten, bis der Startvorgang abgeschlossen ist.
if (gBrowserInit.delayedStartupFinished) {
UndoListInTabmenu.init();
} else {
let delayedStartupFinished = (subject, topic) => {
if (topic == "browser-delayed-startup-finished" &&
subject == window) {
Services.obs.removeObserver(delayedStartupFinished, topic);
UndoListInTabmenu.init();
}
};
Services.obs.addObserver(delayedStartupFinished,
"browser-delayed-startup-finished");
}
Alles anzeigen
Hallo zusammen.
Dieses Script geht hier im Nightly auch nicht mehr richtig:
// ==UserScript==
// @name moveReloadIntoUrl.uc.js
// @description Neuladen Schaltfläche in Adressleiste verschieben
// @compatibility Firefox 57
// @author Ryan, GOLF-AT
// @include main
// @shutdown window.moveReloadIntoURL.unload();
// @homepageURL https://github.com/benzBrake/FirefoxCustomize
// @version 1.2.4
// @note 1.2.4 Bug 1880914 Move Browser* helper functions used from global menubar and similar commands to a single object in a separate file, loaded as-needed and Bug 1820534 - Move front-end to modern flexbox
// @note 1.2.3 Änderung wird in neuen Fenstern nicht wirksam und kann nicht verwendet werden, wenn Hot-Swapping stattfindet.
// @note 1.2.2 Kompatibilität für Firefox 103
// @note 1.2.0 Hot-Swap-fähig, kompatibel mit Nachtmodus und Bilder wurden ins Script integriert
// @note 1.1 20220424 Fehler behoben, und Firefox 100 Kompatibel
// @note 1.0 20171104
// ==/UserScript==
(function () {
let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
const isGerman = (Services.locale.appLocaleAsBCP47 || Services.locale.getAppLocaleAsBCP47()).includes("de");
if (window.moveReloadIntoURL) {
window.moveReloadIntoURL.unload();
delete window.moveReloadIntoURL;
}
window.moveReloadIntoURL = {
handleEvent: function (aEvent) {
if (aEvent.type === "MoveReloadIntoUrlUnload") {
let window = aEvent.originalTarget,
doc = window.document;
let RELOADBTN = CustomizableUI.getWidget("reload-button").forWindow(window).node;
if (RELOADBTN)
RELOADBTN.removeEventListener('DOMAttrModified', this.reloadBtnAttr);
let BTN = doc.getElementById("new-stop-reload-button");
if (BTN)
BTN.parentNode.removeChild(BTN);
if (this.STYLE) {
this.sss.unregisterSheet(this.STYLE.url, this.STYLE.type);
}
window.removeEventListener('MoveReloadIntoUrlUnload', this);
if (window.moveReloadIntoURL)
delete window.moveReloadIntoURL;
}
},
init: function () {
if (window.moveReloadIntoURL) {
this.sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
this.STYLE = {
url: Services.io.newURI('data:text/css;charset=UTF-8,' + encodeURIComponent(`
@-moz-document url-prefix('chrome://browser/content/browser.x') {
#stop-reload-button {
display: none;
}
#new-stop-reload-button {
display: flex !important;
order: 9999;
}
#new-stop-reload-button .urlbar-icon {
-moz-context-properties: fill, fill-opacity !important;
fill: currentColor !important;
}
}
`)),
type: this.sss.AGENT_SHEET
};
this.sss.loadAndRegisterSheet(this.STYLE.url, this.STYLE.type);
}
let PABTN = CustomizableUI.getWidget("pageActionButton").forWindow(window).node;
let RELOADBTN = CustomizableUI.getWidget("reload-button").forWindow(window).node;
let BTN = $C(document, 'hbox', {
id: "new-stop-reload-button",
class: "urlbar-page-action urlbar-addon-page-action",
"tooltiptext": isGerman ? 'Linksklick: Seite neuladen\r\nRechtsklick: Neu laden ohne Cache' : 'Left click: refresh page\nRight click: force refresh page',
style: "list-style-image: url('data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgIC0gTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICAtIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiNkOTAwMDAiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2U9IiNkOTAwMDAiIHN0cm9rZS13aWR0aD0iMSIgPgogIDxwYXRoIGQ9Ik0xMC43MDcgNiAxNC43IDZsLjMtLjMgMC0zLjk5M2EuNS41IDAgMCAwLS44NTQtLjM1NGwtMS40NTkgMS40NTlBNi45NSA2Ljk1IDAgMCAwIDggMUM0LjE0MSAxIDEgNC4xNDEgMSA4czMuMTQxIDcgNyA3YTYuOTcgNi45NyAwIDAgMCA2Ljk2OC02LjMyMi42MjYuNjI2IDAgMCAwLS41NjItLjY4Mi42MzUuNjM1IDAgMCAwLS42ODIuNTYyQTUuNzI2IDUuNzI2IDAgMCAxIDggMTMuNzVjLTMuMTcxIDAtNS43NS0yLjU3OS01Ljc1LTUuNzVTNC44MjkgMi4yNSA4IDIuMjVhNS43MSA1LjcxIDAgMCAxIDMuODA1IDEuNDQ1bC0xLjQ1MSAxLjQ1MWEuNS41IDAgMCAwIC4zNTMuODU0eiIvPgo8L3N2Zz4K",
onclick: function (e) {
let r = CustomizableUI.getWidget("reload-button").forWindow(window).node;
e.preventDefault();
if (r && r.getAttribute('displaystop'))
gBrowser.stop();
else
if (e.button == 2) {
gBrowser.reloadWithFlags(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE)
} else {
if (gBrowser.selectedBrowser._userTypedValue) {
e.target.ownerGlobal.openTrustedLinkIn(gBrowser.selectedBrowser._userTypedValue, 'current', {
postData: null,
triggeringPrincipal: gBrowser.selectedBrowser.contentPrincipal
});
} else {
gBrowser.reload();
}
}
}
})
BTN.appendChild($C(document, 'image', {
class: 'urlbar-icon',
}));
PABTN.after(BTN);
RELOADBTN.addEventListener('DOMAttrModified', this.reloadBtnAttr);
this.reloadBtnAttr();
window.addEventListener('MoveReloadIntoUrlUnload', this)
},
unload: function () {
let windows = Services.wm.getEnumerator('navigator:browser');
while (windows.hasMoreElements()) {
let win = windows.getNext();
win.dispatchEvent(new CustomEvent("MoveReloadIntoUrlUnload"));
}
},
reloadBtnAttr: function (e) {
let doc = e ? e.target.ownerDocument : document;
btn = doc.getElementById('new-stop-reload-button');
if (btn && (!e || e.attrName == 'displaystop')) {
var newVal = e ? e.newValue : doc.getElementById(
"reload-button").getAttribute('displaystop');
if (newVal)
btn.style.listStyleImage = "url('data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgIC0gTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICAtIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiMwMDhjMjMiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2U9IiMwMDhjMjMiIHN0cm9rZS13aWR0aD0iMS41Ij4KICA8cGF0aCBkPSJtOS4xMDggNy43NzYgNC43MDktNC43MDlhLjYyNi42MjYgMCAwIDAtLjg4NC0uODg1TDguMjQ0IDYuODcxbC0uNDg4IDAtNC42ODktNC42ODhhLjYyNS42MjUgMCAxIDAtLjg4NC44ODVMNi44NyA3Ljc1NGwwIC40OTEtNC42ODcgNC42ODdhLjYyNi42MjYgMCAwIDAgLjg4NC44ODVMNy43NTQgOS4xM2wuNDkxIDAgNC42ODcgNC42ODdhLjYyNy42MjcgMCAwIDAgLjg4NSAwIC42MjYuNjI2IDAgMCAwIDAtLjg4NUw5LjEwOCA4LjIyM2wwLS40NDd6Ii8+Cjwvc3ZnPgo=')";
else
btn.style.listStyleImage = "url('data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgIC0gTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICAtIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiNkOTAwMDAiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2U9IiNkOTAwMDAiIHN0cm9rZS13aWR0aD0iMSIgPgogIDxwYXRoIGQ9Ik0xMC43MDcgNiAxNC43IDZsLjMtLjMgMC0zLjk5M2EuNS41IDAgMCAwLS44NTQtLjM1NGwtMS40NTkgMS40NTlBNi45NSA2Ljk1IDAgMCAwIDggMUM0LjE0MSAxIDEgNC4xNDEgMSA4czMuMTQxIDcgNyA3YTYuOTcgNi45NyAwIDAgMCA2Ljk2OC02LjMyMi42MjYuNjI2IDAgMCAwLS41NjItLjY4Mi42MzUuNjM1IDAgMCAwLS42ODIuNTYyQTUuNzI2IDUuNzI2IDAgMCAxIDggMTMuNzVjLTMuMTcxIDAtNS43NS0yLjU3OS01Ljc1LTUuNzVTNC44MjkgMi4yNSA4IDIuMjVhNS43MSA1LjcxIDAgMCAxIDMuODA1IDEuNDQ1bC0xLjQ1MSAxLjQ1MWEuNS41IDAgMCAwIC4zNTMuODU0eiIvPgo8L3N2Zz4K')";
}
},
}
function $C(aDoc, tag, attrs, skipAttrs) {
let d = (aDoc || document);
attrs = attrs || {};
skipAttrs = skipAttrs || [];
var el = "createXULElement" in d ? d.createXULElement(tag) : d.createElement(tag);
return $A(el, attrs, skipAttrs);
}
function $A(el, obj, skipAttrs) {
skipAttrs = skipAttrs || [];
if (obj) Object.keys(obj).forEach(function (key) {
if (!skipAttrs.includes(key)) {
if (typeof obj[key] === 'function') {
el.setAttribute(key, "(" + obj[key].toString() + ").call(this, event);");
} else {
el.setAttribute(key, obj[key]);
}
}
});
return el;
}
"canLoadToolbarContentPromise" in PlacesUIUtils ? PlacesUIUtils.canLoadToolbarContentPromise.then(_ => moveReloadIntoURL.init()) : moveReloadIntoURL.init();
})();
Alles anzeigen
ab Zeile 76 gibt es diesen Bereich den man wahrscheinlich ändern muss:
onclick: function (e) {
let r = CustomizableUI.getWidget("reload-button").forWindow(window).node;
e.preventDefault();
if (r && r.getAttribute('displaystop'))
gBrowser.stop();
else
if (e.button == 2) {
gBrowser.reloadWithFlags(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE)
} else {
if (gBrowser.selectedBrowser._userTypedValue) {
e.target.ownerGlobal.openTrustedLinkIn(gBrowser.selectedBrowser._userTypedValue, 'current', {
postData: null,
triggeringPrincipal: gBrowser.selectedBrowser.contentPrincipal
});
} else {
gBrowser.reload();
}
}
}
Alles anzeigen
oncommand gibt es keine nur diesen onclick Bereich.
Wie muss man das ändern?
Mfg.
Endor
Ein weiteres Skript, von dem ich bei dir nur die uralte XUL-Version finde, bei Mithrandir/Ardiman aber die erste JS-Version, die inzwischen mehrfach angepasst werden musste. Damit kann man Javascript schnell de-/aktivieren:
// JsOff.uc.js
(function() {
if (!window.gBrowser) return;
const
buttonID = 'toolbar-button-js',
configPref = 'javascript.enabled',
labelText = 'Javascript ein-/ausschalten',
tooltipOn = 'Javascript ist eingeschaltet',
tooltipOff = 'Javascript ist ausgeschaltet',
css =
`#${buttonID}[tooltiptext="${tooltipOn}"] {list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAARVBMVEUAAAAKmAAJiAALqAAIeACG/zd6/zMAVAEMugAARgEHZgATQAADJgBS/gARvgA+zgABEAAofAAXxgA1sAAANgFb/xUMrACNps2gAAAAfUlEQVR4XmXOVwrEMAxF0afmmjZ1/0sdSYQhkAsG+0gfxj1mJhKPhJgdtNbLNE4V2BnIgRyAaTaBBCaR9kWMRQKIpG3PgK3JfyOhnRuLt12AsX7QAvydEHeFlYD8GFabeNh+ENWEA3ux8kIn7hrwXuAdnXtPGENVOVMduPUDmGIDcIkU2P8AAAAASUVORK5CYII=");}
#${buttonID}[tooltiptext="${tooltipOff}"] {list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAY1BMVEUAAAD/RDf/HxX/U0f/0dH/LyX8CwD/Rz/MBADsCgD/y8v/vb0gAgD/aWn/MTH/Jx2kAACYAwD/FgtYBABdExP/nZ3/W0+KBgB6AgD/iYlpFRW0JCReBAA8AQDABADwEAAwAQBzWTWpAAAAiElEQVR4XmXMR5bDUAhE0Sr4QTk7h+79r9Ig2ZroDe8pwLEkkb+iGMhQYK93KIjwDZ1BNACWEBYAdGBW9RGYuQGpZwfVvC90BdKhf77meQUq/angdEJ2yNtiQhWQEGo/iQYJt3DHI7QNu7c4/KOtq7rHhXFMBuX1BasZZRhXKP6SJSJTSmWJQx/pFASUD6QxIwAAAABJRU5ErkJggg==");}`;
try {
CustomizableUI.createWidget({
id: buttonID,
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
let button = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
let attributes = {
id: buttonID,
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: 'true',
label: labelText,
tooltiptext: Services.prefs.getBoolPref(configPref) ? tooltipOn : tooltipOff,
};
for (let a in attributes) button.setAttribute(a, attributes[a]);
button.addEventListener('click', () => { if(event.button === 0) {
let isEnabled = !Services.prefs.getBoolPref(configPref);
Services.prefs.setBoolPref(configPref, isEnabled);
let windows = Services.wm.getEnumerator('navigator:browser');
while (windows.hasMoreElements()) {
let button = windows.getNext().document.getElementById(buttonID);
if (isEnabled) { button.setAttribute('tooltiptext', tooltipOn) }
else { button.setAttribute('tooltiptext', tooltipOff) };
};
}});
return button;
}
});
} catch(e) { };
let stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
document.insertBefore(stylesheet, document.documentElement);
})();
Alles anzeigen
Beachte, dass ich alles, was man konfigurieren könnte, nach vorn gesetzt und Variablen zugewiesen habe. Nach demselben Muster habe ich auch andere Skripte geändert und würde dafür plädieren, das möglichst oft zu tun.
Dieses Script geht hier im Nightly auch nicht mehr richtig:
Interessant. Ich nutze dafür das Addon Reload button in Location bar.
Das funktioniert hier:
// ==UserScript==
// @name moveReloadIntoUrl.uc.js
// @description Neuladen Schaltfläche in Adressleiste verschieben
// @compatibility Firefox 57
// @author Ryan, GOLF-AT
// @include main
// @shutdown window.moveReloadIntoURL.unload();
// @homepageURL https://github.com/benzBrake/FirefoxCustomize
// @version 1.2.4
// @note 1.2.4 Bug 1880914 Move Browser* helper functions used from global menubar and similar commands to a single object in a separate file, loaded as-needed and Bug 1820534 - Move front-end to modern flexbox
// @note 1.2.3 Änderung wird in neuen Fenstern nicht wirksam und kann nicht verwendet werden, wenn Hot-Swapping stattfindet.
// @note 1.2.2 Kompatibilität für Firefox 103
// @note 1.2.0 Hot-Swap-fähig, kompatibel mit Nachtmodus und Bilder wurden ins Script integriert
// @note 1.1 20220424 Fehler behoben, und Firefox 100 Kompatibel
// @note 1.0 20171104
// ==/UserScript==
(function () {
let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
const isGerman = (Services.locale.appLocaleAsBCP47 || Services.locale.getAppLocaleAsBCP47()).includes("de");
if (window.moveReloadIntoURL) {
window.moveReloadIntoURL.unload();
delete window.moveReloadIntoURL;
}
window.moveReloadIntoURL = {
handleEvent: function (aEvent) {
if (aEvent.type === "MoveReloadIntoUrlUnload") {
let window = aEvent.originalTarget,
doc = window.document;
let RELOADBTN = CustomizableUI.getWidget("reload-button").forWindow(window).node;
if (RELOADBTN)
RELOADBTN.removeEventListener('DOMAttrModified', this.reloadBtnAttr);
let BTN = doc.getElementById("new-stop-reload-button");
if (BTN)
BTN.parentNode.removeChild(BTN);
if (this.STYLE) {
this.sss.unregisterSheet(this.STYLE.url, this.STYLE.type);
}
window.removeEventListener('MoveReloadIntoUrlUnload', this);
if (window.moveReloadIntoURL)
delete window.moveReloadIntoURL;
}
},
init: function () {
if (window.moveReloadIntoURL) {
this.sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
this.STYLE = {
url: Services.io.newURI('data:text/css;charset=UTF-8,' + encodeURIComponent(`
@-moz-document url-prefix('chrome://browser/content/browser.x') {
#stop-reload-button {
display: none;
}
#new-stop-reload-button {
display: flex !important;
order: 9999;
}
#new-stop-reload-button .urlbar-icon {
-moz-context-properties: fill, fill-opacity !important;
fill: currentColor !important;
}
}
`)),
type: this.sss.AGENT_SHEET
};
this.sss.loadAndRegisterSheet(this.STYLE.url, this.STYLE.type);
}
let PABTN = CustomizableUI.getWidget("pageActionButton").forWindow(window).node;
let RELOADBTN = CustomizableUI.getWidget("reload-button").forWindow(window).node;
let BTN = $C(document, 'hbox', {
id: "new-stop-reload-button",
class: "urlbar-page-action urlbar-addon-page-action",
"tooltiptext": isGerman ? 'Linksklick: Seite neuladen\r\nRechtsklick: Neu laden ohne Cache' : 'Left click: refresh page\nRight click: force refresh page',
style: "list-style-image: url('data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgIC0gTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICAtIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiNkOTAwMDAiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2U9IiNkOTAwMDAiIHN0cm9rZS13aWR0aD0iMSIgPgogIDxwYXRoIGQ9Ik0xMC43MDcgNiAxNC43IDZsLjMtLjMgMC0zLjk5M2EuNS41IDAgMCAwLS44NTQtLjM1NGwtMS40NTkgMS40NTlBNi45NSA2Ljk1IDAgMCAwIDggMUM0LjE0MSAxIDEgNC4xNDEgMSA4czMuMTQxIDcgNyA3YTYuOTcgNi45NyAwIDAgMCA2Ljk2OC02LjMyMi42MjYuNjI2IDAgMCAwLS41NjItLjY4Mi42MzUuNjM1IDAgMCAwLS42ODIuNTYyQTUuNzI2IDUuNzI2IDAgMCAxIDggMTMuNzVjLTMuMTcxIDAtNS43NS0yLjU3OS01Ljc1LTUuNzVTNC44MjkgMi4yNSA4IDIuMjVhNS43MSA1LjcxIDAgMCAxIDMuODA1IDEuNDQ1bC0xLjQ1MSAxLjQ1MWEuNS41IDAgMCAwIC4zNTMuODU0eiIvPgo8L3N2Zz4K"
});
BTN.appendChild($C(document, 'image', {
class: 'urlbar-icon',
}));
BTN.addEventListener('click', function (e) {
let r = CustomizableUI.getWidget("reload-button").forWindow(window).node;
e.preventDefault();
if (r && r.getAttribute('displaystop'))
gBrowser.stop();
else
if (e.button === 2) {
gBrowser.reloadWithFlags(Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE)
} else {
if (gBrowser.selectedBrowser._userTypedValue) {
e.target.ownerGlobal.openTrustedLinkIn(gBrowser.selectedBrowser._userTypedValue, 'current', {
postData: null,
triggeringPrincipal: gBrowser.selectedBrowser.contentPrincipal
});
} else {
gBrowser.reload();
}
}
});
PABTN.after(BTN);
RELOADBTN.addEventListener('DOMAttrModified', this.reloadBtnAttr);
this.reloadBtnAttr();
window.addEventListener('MoveReloadIntoUrlUnload', this)
},
unload: function () {
let windows = Services.wm.getEnumerator('navigator:browser');
while (windows.hasMoreElements()) {
let win = windows.getNext();
win.dispatchEvent(new CustomEvent("MoveReloadIntoUrlUnload"));
}
},
reloadBtnAttr: function (e) {
let doc = e ? e.target.ownerDocument : document;
btn = doc.getElementById('new-stop-reload-button');
if (btn && (!e || e.attrName == 'displaystop')) {
var newVal = e ? e.newValue : doc.getElementById(
"reload-button").getAttribute('displaystop');
if (newVal)
btn.style.listStyleImage = "url('data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgIC0gTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICAtIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiMwMDhjMjMiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2U9IiMwMDhjMjMiIHN0cm9rZS13aWR0aD0iMS41Ij4KICA8cGF0aCBkPSJtOS4xMDggNy43NzYgNC43MDktNC43MDlhLjYyNi42MjYgMCAwIDAtLjg4NC0uODg1TDguMjQ0IDYuODcxbC0uNDg4IDAtNC42ODktNC42ODhhLjYyNS42MjUgMCAxIDAtLjg4NC44ODVMNi44NyA3Ljc1NGwwIC40OTEtNC42ODcgNC42ODdhLjYyNi42MjYgMCAwIDAgLjg4NC44ODVMNy43NTQgOS4xM2wuNDkxIDAgNC42ODcgNC42ODdhLjYyNy42MjcgMCAwIDAgLjg4NSAwIC42MjYuNjI2IDAgMCAwIDAtLjg4NUw5LjEwOCA4LjIyM2wwLS40NDd6Ii8+Cjwvc3ZnPgo=')";
else
btn.style.listStyleImage = "url('data:image/svg+xml;base64,PCEtLSBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCiAgIC0gTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcwogICAtIGZpbGUsIFlvdSBjYW4gb2J0YWluIG9uZSBhdCBodHRwOi8vbW96aWxsYS5vcmcvTVBMLzIuMC8uIC0tPgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDE2IDE2IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9IiNkOTAwMDAiIGZpbGwtb3BhY2l0eT0iMS4wIiBzdHJva2U9IiNkOTAwMDAiIHN0cm9rZS13aWR0aD0iMSIgPgogIDxwYXRoIGQ9Ik0xMC43MDcgNiAxNC43IDZsLjMtLjMgMC0zLjk5M2EuNS41IDAgMCAwLS44NTQtLjM1NGwtMS40NTkgMS40NTlBNi45NSA2Ljk1IDAgMCAwIDggMUM0LjE0MSAxIDEgNC4xNDEgMSA4czMuMTQxIDcgNyA3YTYuOTcgNi45NyAwIDAgMCA2Ljk2OC02LjMyMi42MjYuNjI2IDAgMCAwLS41NjItLjY4Mi42MzUuNjM1IDAgMCAwLS42ODIuNTYyQTUuNzI2IDUuNzI2IDAgMCAxIDggMTMuNzVjLTMuMTcxIDAtNS43NS0yLjU3OS01Ljc1LTUuNzVTNC44MjkgMi4yNSA4IDIuMjVhNS43MSA1LjcxIDAgMCAxIDMuODA1IDEuNDQ1bC0xLjQ1MSAxLjQ1MWEuNS41IDAgMCAwIC4zNTMuODU0eiIvPgo8L3N2Zz4K')";
}
},
}
function $C(aDoc, tag, attrs, skipAttrs) {
let d = (aDoc || document);
attrs = attrs || {};
skipAttrs = skipAttrs || [];
var el = "createXULElement" in d ? d.createXULElement(tag) : d.createElement(tag);
return $A(el, attrs, skipAttrs);
}
function $A(el, obj, skipAttrs) {
skipAttrs = skipAttrs || [];
if (obj) Object.keys(obj).forEach(function (key) {
if (!skipAttrs.includes(key)) {
if (typeof obj[key] === 'function') {
el.setAttribute(key, "(" + obj[key].toString() + ").call(this, event);");
} else {
el.setAttribute(key, obj[key]);
}
}
});
return el;
}
"canLoadToolbarContentPromise" in PlacesUIUtils ? PlacesUIUtils.canLoadToolbarContentPromise.then(_ => moveReloadIntoURL.init()) : moveReloadIntoURL.init();
})();
Alles anzeigen
Siehe Zeilen 77–95.
Hallo Speravir.
Vielen Dank funktioniert wieder einwandfrei.
Das Script zum aktivieren - deaktivieren von Javascript
lade ich dann auch gleich mit hoch.
Vielen Dank für Deine Mühe.
Mfg.
Endor
Und noch ein Script verweigert seinen Dienst. Ich habe schon versucht ab Zeile 55 das abzustellen, will mir nich gelingen. Wer hilft bitte?
// Tabschau.uc.js
// Alle in Tabs öffnen von unten nach oben verlagert
// Anzahl Ordner und Links wird angezeigt
// @aborix
// @ BrokenHeart ab Version 110 https://www.camp-firefox.de/forum/thema/112673-userchrome-js-scripte-f%C3%BCr-den-fuchs-diskussion/?postID=1217817#post1217817
(function() {
if (!window.gBrowser)
return;
function setFunction() {
PlacesViewBase.prototype._mayAddCommandsItems =
function PVB__mayAddCommandsItems(aPopup) {
let hasMultipleURIs = false;
let menuitemCount = 0;
let menuCount = 0;
if (aPopup._placesNode.childCount > 0) {
for (let item of aPopup.children) {
if (item._placesNode) {
if (item.localName == 'menuitem') {
menuitemCount++;
} else if (item.localName == 'menu') {
menuCount++;
}
}
}
if (menuitemCount > 0 || menuCount > 0) {
hasMultipleURIs = true;
}
}
if (!hasMultipleURIs) {
aPopup.setAttribute("nofooterpopup", "true");
if (aPopup._endOptOpenAllInTabs) {
aPopup.removeChild(aPopup._endOptOpenAllInTabs);
aPopup._endOptOpenAllInTabs = null;
aPopup.removeChild(aPopup._endOptSeparator);
aPopup._endOptSeparator = null;
}
return;
}
aPopup.removeAttribute("nofooterpopup");
if (!aPopup._endOptOpenAllInTabs) {
aPopup._endOptSeparator = document.createXULElement("menuseparator");
aPopup._endOptSeparator.className = "bookmarks-actions-menuseparator";
aPopup.insertBefore(aPopup._endOptSeparator, aPopup.firstChild);
aPopup._endOptOpenAllInTabs = document.createXULElement("menuitem");
aPopup._endOptOpenAllInTabs.className = "openintabs-menuitem";
if (this.options?.extraClasses?.entry) {
aPopup._endOptOpenAllInTabs.classList.add(
this.options.extraClasses.entry
);
}
aPopup._endOptOpenAllInTabs.setAttribute(
"oncommand",
"PlacesUIUtils.openMultipleLinksInTabs(this.parentNode._placesNode, event, " +
"PlacesUIUtils.getViewForNode(this));"
);
aPopup._endOptOpenAllInTabs.setAttribute(
"onclick",
"checkForMiddleClick(this, event); event.stopPropagation();"
);
aPopup.insertBefore(aPopup._endOptOpenAllInTabs, aPopup.firstChild);
}
let label = menuCount + " Ordner";
label += " / " + menuitemCount + " Link"
if (menuitemCount != 1) {
label += "s";
}
if (menuitemCount == 1) {
label += " -> Link in Tab öffnen."
} else if (menuCount > 1) {
label += " -> Links in Tabs öffnen."
}
aPopup._endOptOpenAllInTabs.setAttribute("label", label);
}
}
setTimeout(function() {
setFunction();
},50);
})();
Alles anzeigen
aPopup._endOptOpenAllInTabs.setAttribute(
"oncommand",
"PlacesUIUtils.openMultipleLinksInTabs(this.parentNode._placesNode, event, " +
"PlacesUIUtils.getViewForNode(this));"
);
aPopup._endOptOpenAllInTabs.setAttribute(
"onclick",
"checkForMiddleClick(this, event); event.stopPropagation();"
);
=>
aPopup._endOptOpenAllInTabs.addEventListener('command', event => {
PlacesUIUtils.openMultipleLinksInTabs(
event.currentTarget.parentNode._placesNode,
event,
PlacesUIUtils.getViewForNode(event.currentTarget)
);
});
aPopup._endOptOpenAllInTabs.addEventListener('click', event => {
checkForMiddleClick(event.currentTarget, event);
event.stopPropagation();
});
Alles anzeigen
Ungetestet, aber basierend auf dem Original-Code. Wenn man schon eine Firefox-interne Funktion überschreibt … Diese Funktion unterscheidet sich insgesamt allerdings signifikant vom Orignial-Code. Ich frage mich, ob das schon immer so war, weil dieses Script bewusst so viel verändert, oder ob das Script einfach schon völlig veraltet ist und dadurch wichtige Änderungen seitens Mozilla verloren gehen …
Sören Hentzschel , herzlichen Dank, es funktioniert wieder.
Ich frage mich, ob das schon immer so war, weil dieses Script bewusst so viel verändert, oder ob das Script einfach schon völlig veraltet ist und dadurch wichtige Änderungen seitens Mozilla verloren gehen …
Da bin ich überfragt, aber älter ist es schon. Außerdem ("musste") durfte BrokenHeart es schon nachbessern, weil es damals schon Fehler gab.
Hallo zusammen.
Eine Frage habe hier ein Script welches einen onwheel Teil enthält.
Der funktioniert aber nicht mehr.
(function() {
if (location != "chrome://browser/content/browser.xhtml") return;
try {
// Zoom-Steuerung, tooltiptext: 'Linksklick oder Rad ↑: vergrößern | Mittelklick: zurücksetzen |
// Rechtsklick oder Rad ↓: verkleinern',
CustomizableUI.createWidget({
id: 'zoom-control-ToolBarbutton',
type: 'custom',
onBuild: function(aDocument) {
let toolbaritem = aDocument.createXULElement('toolbarbutton');
let props = {
id: 'zoom-control-ToolBarbutton',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
oncontextmenu: 'return(false);',
label: 'Zoom-Steuerung',
tooltiptext: 'Linksklick oder Rad ↑: vergrößern | Mittelklick: zurücksetzen | Rechtsklick oder Rad ↓: verkleinern',
style: 'list-style-image: url(data:image/png;base64,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)',
};
for (let p in props)
toolbaritem.setAttribute(p, props[p]);
toolbaritem.addEventListener('click', event => {
if (event.button == 0) {
if (event.button == 0) {
FullZoom.enlarge();
};
if (event.button == 1) {
FullZoom.reset();
};
if (event.button == 2) {
FullZoom.reduce();
};
onwheel: if (event.deltaY < 0) {
FullZoom.enlarge();
} else {
FullZoom.reduce();
};
}
});
for (let p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e){};
})();
Alles anzeigen
Das original sieht so aus:
(function() {
if (location != "chrome://browser/content/browser.xhtml") return;
try {
// Zoom-Steuerung, tooltiptext: 'Linksklick oder Rad ↑: vergrößern | Mittelklick: zurücksetzen |
// Rechtsklick oder Rad ↓: verkleinern',
CustomizableUI.createWidget({
id: 'zoom-control-ToolBarbutton',
type: 'custom',
onBuild: function(aDocument) {
let toolbaritem = aDocument.createXULElement('toolbarbutton');
let props = {
id: 'zoom-control-ToolBarbutton',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
oncontextmenu: 'return(false);',
label: 'Zoom-Steuerung',
tooltiptext: 'Linksklick oder Rad ↑: vergrößern | Mittelklick: zurücksetzen | Rechtsklick oder Rad ↓: verkleinern',
style: 'list-style-image: url(data:image/png;base64,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)',
onclick: 'if (event.button == 0) { \
FullZoom.enlarge(); \
}; \
if (event.button == 1) { \
FullZoom.reset(); \
}; \
if (event.button == 2) { \
FullZoom.reduce(); \
};',
onwheel: 'if (event.deltaY < 0) { \
FullZoom.enlarge(); \
} else { \
FullZoom.reduce(); \
};'
};
for (let p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e){};
})();
Alles anzeigen
Habe ich wohl falsch geändert.
Mfg.
Endor
Ungetestet:
toolbaritem.addEventListener('click', event => {
if (event.button === 0) {
FullZoom.enlarge();
} else if (event.button === 1) {
FullZoom.reset();
} else if (event.button === 2) {
FullZoom.reduce();
}
});
toolbaritem.addEventListener('wheel', event => {
event.preventDefault();
if (event.deltaY < 0) {
FullZoom.enlarge();
} else {
FullZoom.reduce();
}
});
Alles anzeigen
Hallo bugger.
Perfekt!!
Funktioniert einwandfrei.
Vielen Dank.
Mfg.
Endor
Die oncontextmenu-Zeile müsste auch noch angepasst werden, falls dieser Listener eine Relevanz besitzt. Wenn nicht, kann die Zeile auch entfernt werden. Jedenfalls macht die so aus dem gleichen Grund auch nichts mehr.