- Firefox-Version
- 145.0.1 (64-Bit)
- Betriebssystem
- Windows
Mitleser hat hier ein Musterskript vorgestellt, das ich mal etwas unter die Lupe genommen habe.
Nach Überprüfung und vergleichen mit "meinem" Quicklink-Button für das Forum,
kam ich zu dem Ergebnis, dass dieses Skript wohl einen besseren Code beinhaltet.
Darauf habe ich alle meine "Quicklinks" überarbeitet.
Dieser Teil ist von "https://www.perplexity.ai/" erstellt!
Hauptunterschiede
- Konfiguration und Anpassbarkeit: Die neue Variante verwendet eine zentrale "UserConfiguration"-Sektion,
in der z.B. die ID, das Linkziel, das Label und der Icon-Pfad klar anpassbar ausgegliedert sind.
Das macht das Skript deutlich flexibler im täglichen Einsatz und Änderungen können ohne Änderung
an der Logik vorgenommen werden, was Wartung und Anpassung vereinfacht. - Icon-Handling: Im neuen Skript werden Icon-Pfad und -Dateiname dynamisch generiert. Zusätzlich
werden moderne CSS-Eigenschaften wie MozContextProperties gesetzt, was wichtig sein kann,
wenn SVG-Icons oder Farbthemen im Browser verwendet werden. Auch wird die Handhabung
der Firefox-Einstellung zur Unterstützung von SVG-Kontext-Eigenschaften berücksichtigt. - Event-Handling: Das neue Skript nutzt einen gezielten Event Listener für Klicks und prüft explizit,
dass der linke Mausklick benutzt wurde (event.button === 0). Das erhöht die Fehlertoleranz und Flexibilität
bei der Benutzung durch Nutzer im Gegensatz zur festen onclick-Logik der alten Variante,
in der alle Klicks (auch Rechtsklick oder Mittelklick) behandelt werden. - Tab-Logik und Ziel: Die alte Variante öffnet immer vier feste URLs, während die neue Variante flexibel für eine
einzelne frei konfigurierbare Zieladresse programmiert ist. Falls mehrere Ziele benötigt werden,
müsste das im neuen Skript ergänzt werden, aber für typische Szenarien ist das neue Verhalten deutlich übersichtlicher. - Kompatibilität und Zukunftssicherheit: Die neue Variante nutzt moderne Browser-APIs und bezieht Features
wie PathUtils und moderne Preferences explizit mit ein – sie ist daher besser für neue Firefox-Versionen
geeignet und zukunftssicherer.
Fazit
Die neue Variante ist die bessere Wahl, weil sie einfacher anpassbar, technisch moderner und robuster gegenüber zukünftigen Änderungen ist.
Sie ist übersichtlicher strukturiert und unterstützt eine nachhaltige Wartung und Erweiterung durch Nutzer mit unterschiedlichen Bedürfnissen.
Bis hierhin ist der Text von "https://www.perplexity.ai/" erstellt.
Nun denn, hier meine ersten Quicklink-Skripte.
Als Erstes der Quicklink-Button für das Forum.
// QuickLinkButton-cf.uc.js
// Das Script erstellt einen Button, der einen Tab öffnet mit einer Website (https://www.camp-firefox.de/forum/).
// Source file https://www.camp-firefox.de/forum/thema/140072/?postID=1282691#post1282691
/* ----------------------------------------------------------------------------------- */
/* Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen */
/* %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons */
/* ----------------------------------------------------------------------------------- */
(function() {
if (!window.gBrowser)
return;
const
// ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
id = 'link-button-cf', // Id des Buttons
link = 'https://www.camp-firefox.de/forum/', // Linkziel des Buttons
label = 'Quicklink: camp-firefox.de/...', // Bezeichnung des Buttons
tooltiptext = 'Quicklink:\nForum - camp-firefox.de',
// Icon-------------------------------------------------------
icon = 'camp-firefox.ico', // [Name.Dateiendung] des Symbols
iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
// ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
}
//BUTTON
try {
CustomizableUI.createWidget({
id: id,
defaultArea: CustomizableUI.AREA_NAVBAR,
label: label,
tooltiptext: tooltiptext,
onCreated: (button) => {
button.style.MozContextProperties = 'fill, stroke, fill-opacity';
button.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")';
button.style.minWidth = 'fit-content';
}
});
} catch(e) {};
const button = document.getElementById(id);
//click
button.addEventListener('click', () => {
if (event.button === 0) {
event.target.ownerGlobal.openTrustedLinkIn(link, "tab");
}
});
})();
Alles anzeigen
Platzhalter für das Symbol
Nun ein Button der gleich mehrere Tabs (Internetseiten) öffnet
// QuickLinkButton.uc.js
// Das Script erstellt einen Button, der mehrere Tabs öffnet mit verschiedenen Webseiten.
// Source file https://www.camp-firefox.de/forum/thema/140072/?postID=1282691#post1282691
/* ----------------------------------------------------------------------------------- */
/* Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen */
/* %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons */
/* ----------------------------------------------------------------------------------- */
(function() {
if (!window.gBrowser)
return;
const
// ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
id = 'link-button', // Id des Buttons
// link = 'fedia.io/m/FirefoxCSS', // Linkziel des Buttons
quickLinks =
[
'https://www.tagesschau.de/',
'https://www.zdfheute.de/',
'https://www.welt.de/?wtrid=crossdevice.n24.desktop.directhome',
'https://www.n-tv.de/',
];
label = 'Quicklink: M:C', // Bezeichnung des Buttons
tooltiptext = 'Quicklink: Morning Coffee',
// Icon-------------------------------------------------------
icon = 'cup-16as.png', // [Name.Dateiendung] des Symbols
iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
// ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
}
//BUTTON
try {
CustomizableUI.createWidget({
id: id,
defaultArea: CustomizableUI.AREA_NAVBAR,
label: label,
tooltiptext: tooltiptext,
onCreated: (button) => {
button.style.MozContextProperties = 'fill, stroke, fill-opacity';
button.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")';
button.style.minWidth = 'fit-content';
}
});
} catch(e) {};
const button = document.getElementById(id);
//click
button.addEventListener('click', function(event) {
if (event.button === 0) {
quickLinks.forEach(link => {
openWebLinkIn(link, "tab");
});
}
});
})();
Alles anzeigen
Platzhalter für das Symbol
Und nun noch ein Quicklink-Button für "about:about"
// QuickLinkButton-about:about.uc.js = Button_for_QuickLinks-about.uc.js
// Das Script erstellt einen Button, der einen Tab öffnet mit den Links zu verschiedenen "about:"-Seiten.
// Source file https://www.camp-firefox.de/forum/thema/140072/?postID=1282691#post1282691
/* ----------------------------------------------------------------------------------- */
/* Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen */
/* %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons */
/* ----------------------------------------------------------------------------------- */
(function() {
if (!window.gBrowser)
return;
const
// ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
id = 'link-button-about', // Id des Buttons
link = 'about:about', // Linkziel des Buttons
label = 'Quicklink: about:about', // Bezeichnung des Buttons
tooltiptext = 'Quicklink:\nabout:about',
// Icon-------------------------------------------------------
icon = 'firefox.svg', // [Name.Dateiendung] des Symbols
iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
// ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
}
//BUTTON
try {
CustomizableUI.createWidget({
id: id,
defaultArea: CustomizableUI.AREA_NAVBAR,
label: label,
tooltiptext: tooltiptext,
onCreated: (button) => {
button.style.MozContextProperties = 'fill, stroke, fill-opacity';
button.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")';
button.style.minWidth = 'fit-content';
button.style.fill = '#f1b508'; // Farbe für das SVG-Icon setzen
}
});
} catch(e) {};
const button = document.getElementById(id);
//click
button.addEventListener('click', () => {
if (event.button === 0) {
event.target.ownerGlobal.openTrustedLinkIn(link, "tab")
}
});
})();
Alles anzeigen
Platzhalter für das Symbol
Es folgen noch weitere Buttons!!