Bei meinen Tests eben funktioniert alles einwandfrei!
Häkchen können zur Auswahl gesetzt werden.
Und in neuen E-Mails können die Hintergrundfarben als auch die Textfarben angewendet werden.
Bei meinen Tests eben funktioniert alles einwandfrei!
Häkchen können zur Auswahl gesetzt werden.
Und in neuen E-Mails können die Hintergrundfarben als auch die Textfarben angewendet werden.
milupo Genau darum geht es mir! Du hast den Nagel auf den Kopf getroffen.
Und entschuldige, wenn ich manchmal es nicht so passend beschreibe, was ich eigentlich will.
Wenn ich hier den Gegenwind so verspüre, fange ich halt an, im Unterforum "Individuelle Anpassungen" 20 neue Threads zu eröffnen.
Alle mehr oder weniger mit ähnlichen Fragen! Jedoch sind diese 20 Skripte alle sehr verschieden.
Nein im Ernst, so soll es doch nicht sein, oder?
Äh, wen interessiert es? Der User hat zwei, drei oder vier verschiedene Skripte die nicht mehr funktionieren und stellt seine Frage dann selbst verständlich in einen Eigenen Thread!
Was soll dieser Ton. Ich meine genau unseren Diskussions-Thread und keine Hilfethreads. Darum geht es doch eigentlich hier, oder nicht. Also.
Hätte ich anders Formulieren sollen.
Aber es folgte ja auch eine Erklärung!
Aber das wichtigste, kommt im Zitat nicht vor.
Dass es bei meinem Anliegen gar nicht um die Hilfe von anderen Usern geht, sondern um den Austausch untereinander!
Um gewisse Absprachen zu treffen, usw.
Steht hat in diesem Beitrag.^^
Und wenn man diesen speziellen Thread unter Anpassungen anpinnt? Könnte es sein, dass er dann normalen Nutzern, die um Hilfe suchen, eher entgeht?
Äh, wen interessiert es? Der User hat zwei, drei oder vier verschiedene Skripte die nicht mehr funktionieren und stellt seine Frage dann selbst verständlich in einen Eigenen Thread!
Aber um dieses Zenario geht es mir gar nicht!!
Es geht mir um einen Bereich, wo "Entwickler" oder "Hacker" unter sich sind und verschiedenste Dinge unter einander Besprechen und klären können!
Z.B. die Sache mit dem "Header"! Oder wie am besten das mit dem EventListener zu lösen ist!
Oder, wie man zum größten Teil auf CSS verzichten kann?
Ach, und das mit dem Fallback! Das sind so einige Dinge, die man,
Wenn man dann einige der von uns verwendeten Skripte durchgeht, hier (da) dann zur Debatte stellen könnte.
Oder, oder, oder ... .
![]()
Ein nicht öffentlicher Unterbereich?
Er soll ja nur zum Korrigieren und besprechen verschiedener Skripte sein
und als Nachschlagewerk für einzelne User des Forums.
Z.Z. ist es doch so, dass andauernd das Rad neu erfunden wird!
Viele sind aber ganz persönlich angepasst, wenn auch nur in Nuancen.
Das Ziel wird ja sicher auch nicht sein, dass ein Script für alle User haarklein genau gleich aussieht...
Auch darum geht es! Skripte für alle, wer ein angepasstes Skript braucht, soll sich mit der Materie auseinandersetzen.
Wir haben doch das Unterforum „Anpassungen“, in dem für jedes Script ein Thema eröffnet werden kann.
Ja schon, aber da schieben sich dann jede Menge anderer Threads dazwischen
und so geht dann der Überblick verloren.
Es muss, es soll ja auch nicht ein eigenes Unterforum sein, es kann ja auch ein Unterunterforum sein, halt extra nur für
einzelne Skripte und nicht so ein Durch einander wie bisher, dass in einem Thread dutzende Skript besprochen werden.
Ist ja auch nur so eine Idee.
Siehe z.B. Einige Skripte funktionieren seit ff 138 nicht mehr
oder Scripte ab Fx138 - Bitte um Hilfe
oder ...
Das sind alles Benutzeranfragen!
Aber so habe ich es mir nicht Vorgestellt.
Was das Aufsplitten des Threads angeht, würde ich noch einen Schritt gehen wollen.
Ein Unterbereich!
Entwickler, oder so.
Dort können wir diese Diskussion fortführen und neue Threads aufmachen.
Jedes Skript einen eigenen!
Titel, der Name des Skripts.
Dann könnten wir ein Skript nach dem Anderen abarbeiten,
wobei ich z.B. für diverse Buttons sehr ähnliche Skript verwende, die müssen dann nicht alle
abgearbeitet werden.
Des Weiteren würden wir, so glaube ich, einen besseren Überblick erhalten.
Ich verwende 38 Skripte, davon sind 12 sehr ähnlich! Buttons halt.
Ein paar ohne Grafiken und einige mit sehr viel CSS.
Werden wir machen, versprochen. ![]()
Wir haben ja noch etwas "Redebedarf" und so wird das auch noch ein Weilchen dauern!
# ------------------------------------------------------------------------------------------------- #
Das mit dem CSS ist so eine Sache.
So ganz wird es wohl nicht gehen!
So Sachen, wie verstecktes Inline-CSS, wird man immer mal nutzen müssen.
Der große Unterschied zu base64 ist, es muss nicht erst etwas aus dem Netz geladen werden!
Die Grafiken liegen ja lokal vor!
Und zu dem Link! Sören hat dieses Thema ja schon einmal kommentiert!
Ja, bei größeren Projekten ergibt es auf jeden Fall Sinn CSS auszulagern, der besseren Wartbarkeit wegen.
Aber das hier, was wir machen, sind dann doch eher Kleinigkeiten!
Und der Vorteil den ich darin sehe Inline-CSS zu verwenden, man "installiert" eine Datei und fertig!
Funktioniert es nicht, muss man dann halt schauen, aber in der Regel sollte es funktionieren,
ohne dass da ein User noch viel machen muss.
Wir sollten aber für DIESE Diskussion, so finde ich, ein eigenes Thema aufmachen, oder?
So, mit Fallback.
Als Muster für andere Skripte.
// ------------------------------------------------------------------------------------------------
// Pfad zum Profilordner
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
// Pfad in den entsprechenden Unterordner
let IconPath = '/chrome/icons/'; // Pfad in den entsprechenden Unterordner
// Name & Dateiendung des anzuzeigenden Symbols!
let ButtonIcon = "Google.svg";
// Erstelle ein img-Element, um zu überprüfen, ob die Grafik geladen werden kann
let img = new Image();
img.src = "file:" + ProfilePath + IconPath + ButtonIcon;
img.onload = function() {
// Wenn die Grafik geladen werden kann, setze das listStyleImage
menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + IconPath + ButtonIcon) + '")';
};
img.onerror = function() {
// Wenn die Grafik nicht geladen werden kann, verwende das Fallback-Icon
menuitem.style.listStyleImage = 'url("chrome://browser/skin/translations.svg")';
};
// ------------------------------------------------------------------------------------------------
Alles anzeigen
Ich zitiere mich mal selber.
So, ...
ZitatAlles anzeigen// ------------------------------------------------------------------------------------------------
// Pfad zum Profilordner
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
// Pfad in den entsprechenden Unterordner
let IconPath = '/chrome/icons/'; // Pfad in den entsprechenden Unterordner
// Name & Dateiendung des anzuzeigenden Symbols!
let ButtonIcon = "Google.svg";
menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + IconPath + ButtonIcon) + '")';
// ------------------------------------------------------------------------------------------------
... und als Fallback so ...
Zitatmenuitem.style.listStyleImage = ' url("chrome://browser/skin/translations.svg")';
Nun muss "nur" noch das Ding mit der Prüfung geschrieben werden.
Nur noch![]()
Will man wirklich ein einfaches Skript so aufblähen?
Dann doch lieber dem Anwender erklären, dass er, wenn er eine eigene Grafik verwenden möchte,
sich diese im Ordner "icons" zu befinden hat!
Und wenn nicht, ist halt standardmäßig "translations.svg" aktiv.
Nachtrag!
Wer gefallen an solchen SVG-Grafiken, kann mich fragen, dann bekommt er alle die ich habe in einem Paket!
Und wer jetzt schon neugierig ist, ... icons_3.zip
Vielleicht wäre es möglich, wenn Endor durchgehend chrome://-Grafiken angeben könnte. Diese würden wie Base64-Grafiken sofort funktionieren. Und im Kommentar schreibt man dann, dass gesonderte Grafiken mit file:/// angegeben werden sollen, dabei könnte man ein Beispiel angeben. Dabei sollten m. E. nur absolute Pfade angegeben werden, mal davon abgesehen, dass die relativen Pfade nicht immer funktionieren. Aber wenn da ein Nutzer irgendetwas verschiebt, wird die Grafik dann immer noch gefunden.
Finde ich prinzipiell gut!
Schreibe doch mal was!
Z.B. so etwas:
// ------------------------------------------------------------------------------------------------
// Pfad zum Profilordner
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
// Pfad in den entsprechenden Unterordner
let IconPath = '/chrome/icons/'; // Pfad in den entsprechenden Unterordner
// Name & Dateiendung des anzuzeigenden Symbols!
let ButtonIcon = "Google.svg";
menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + IconPath + ButtonIcon) + '")';
// ------------------------------------------------------------------------------------------------
Und dann eine Erklärung für "Beginners", was sie damit anfangen sollen!
In diesem Fall denke ich, kaum jemand wird sich beide Skripte gleichzeitig installieren.
Ich. ![]()
Hin und wieder vergleiche ich, komme aber zu dem Ergebnis, dass DeepL bessere Übersetzungen liefert.
Nachteil von DeepL, es kann halt nicht so viele Sprachen.
?
Hier beide Skripte, mit korrigierter Grafik!
// ContextTranslate_Google.uc.js
// https://github.com/ardiman/userChrome.js/tree/master/contexttranslate
// ex ContextTranslate.uc.js///
// modifiziert by universum 123, Umlaute geändert by 2002Andreas
// https://www.camp-firefox.de/forum/thema/126100/?postID=1107070#post1107070
(function () {
if (location != 'chrome://browser/content/browser.xhtml')
return;
let translate = function () {
let browserMM = gBrowser.selectedBrowser.messageManager;
browserMM.addMessageListener('getSelection', function listener(message) {
let t = (message.data !== '');
let e = (document.charset || document.characterSet);
if (t) {
openWebLinkIn('https://translate.google.com/?sl=en&tl=de&text=' + encodeURIComponent(message.data), 'tab');
} else {
openWebLinkIn('https://translate.google.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab');
};
browserMM.removeMessageListener('getSelection', listener, true);
});
browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
}
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context-googletranslate';
menuitem.setAttribute('label', '\u00dcbersetzen (Google)');
menuitem.classList.add('menuitem-iconic');
menuitem.style.listStyleImage = ' url("chrome://browser/skin/translations.svg")';
menuitem.addEventListener('command', translate);
let refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
und
// ContextTranslate-DeepL.uc.js
// https://github.com/ardiman/userChrome.js/tree/master/contexttranslate
// ex ContextTranslate.uc.js///
// modifiziert by universum 123, Umlaute geändert by 2002Andreas
// https://www.camp-firefox.de/forum/thema/126100/?postID=1107070#post1107070
(function () {
if (location.href !== 'chrome://browser/content/browser.xhtml') return;
let translate = function () {
let browserMM = gBrowser.selectedBrowser.messageManager;
browserMM.addMessageListener('getSelection', function listener(message) {
let t = (message.data !== '');
let e = (document.charset || document.characterSet);
if (t) {
openWebLinkIn('https://www.deepl.com/translator#en/de/' + encodeURIComponent(message.data), 'tab');
} else {
openWebLinkIn('https://www.deepl.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab');
};
browserMM.removeMessageListener('getSelection', listener, true);
});
browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
}
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context-DeepLtranslate';
menuitem.setAttribute('label', '\u00dcbersetzen (DeepL)');
menuitem.classList.add('menuitem-iconic');
menuitem.style.listStyleImage = ' url("chrome://browser/skin/translations.svg")';
menuitem.addEventListener('command', translate);
let refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
Ein bisschen blöd ist nun, dass beide die gleiche Grafik verwenden.
Eventuell für DeepL dieses verwenden =>
menuitem.style.listStyleImage = ' url("chrome://browser/skin/notification-icons/desktop-notification.svg")';
Nicht schön, aber wenigstens ein Anderes, welches auch irgendwie passt, finde ich.
Sorry, habe ich blöd formuliert!
Du warst nicht persönlich gemeint.
Denke, es ist wirklich besser, im Skript wird diese Grafik genutzt!
Ob Endor diese Diskussion mitbekommt und in beiden, also ContextTranslate-DeepL.uc.js & ContextTranslate-Google.uc.js
noch ändert?
Na dann musst Du einen Platzhalter intern finden!
Z.B. dieses => menuitem.style.listStyleImage = ' url("chrome://browser/skin/translations.svg")';
Endor 2002Andreas
Hier das fehlende Symbol.
menuitem.style.listStyleImage = ' url("data:image/png;base64,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")';
Hast Du irgendeine Software neu installiert?
Oder ein Update einer Software durchgeführt?
Und über Chrome wird genauso hergezogen , ....
Von welchen Usern? Jene, die Edge, Opera oder Vivaldi nutzten?
Wenn ja, merkt man, dass die nichts im Kopf haben!
Diese Browser bauen alle auf "chromium" auf, Google sammelt schön bei allen jede Menge Daten.
Und nur weil man die "Oberfläche" etwas anders bedienen, verändern kann, sind es doch alle der gleiche Browser!
Endor Kannst Du das Skript in Deine Sammlung aufnehmen?
Einen gescheiten header muss ich mir noch einfallen lassen,
oder hast Du eine Idee?Vielleicht context-translate-enhanced.uc.js? (Ping Endor.) Die bisherige Variante ist aber wohl nicht bei Endor zu finden - oder besser: die zwei Varianten für Google und DeepL.
Beim header dachte ich eher in so etwas wie:
// ==UserScript==
// @name context-translate-enhanced.uc.js
// @charset UTF-8
// @author @mira
// @version v2025.05.06
// Source https://www.camp-firefox.de/forum/thema/139300/?postID=1271397#post1271397
Und die andere beiden Skripte sind ebenfalls nicht bei Endor !
// Translate_DeepL.uc.js
// https://github.com/ardiman/userChrome.js/tree/master/contexttranslate
// ex ContextTranslate.uc.js///
// modifiziert by universum 123, Umlaute geändert by 2002Andreas
// https://www.camp-firefox.de/forum/thema/126100/?postID=1107070#post1107070
(function () {
if (location.href !== 'chrome://browser/content/browser.xhtml') return;
let translate = function () {
let browserMM = gBrowser.selectedBrowser.messageManager;
browserMM.addMessageListener('getSelection', function listener(message) {
let t = (message.data !== '');
let e = (document.charset || document.characterSet);
if (t) {
openWebLinkIn('https://www.deepl.com/translator#en/de/' + encodeURIComponent(message.data), 'tab');
} else {
openWebLinkIn('https://www.deepl.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab');
};
browserMM.removeMessageListener('getSelection', listener, true);
});
browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
}
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context-DeepLtranslate';
menuitem.setAttribute('label', '\u00dcbersetzen (DeepL)');
menuitem.classList.add('menuitem-iconic');
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
let IconPath = '/chrome/icons/'; // Pfad in den entsprechenden Unterordner
let ButtonIcon = "DeepL_2.png"; // Name & Dateiendung des anzuzeigenden Symbols!
menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + IconPath + ButtonIcon) + '")';
menuitem.addEventListener('command', translate);
let refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
// ContextTranslate_Google.uc.js
// https://github.com/ardiman/userChrome.js/tree/master/contexttranslate
// ex ContextTranslate.uc.js///
// modifiziert by universum 123, Umlaute geändert by 2002Andreas
// https://www.camp-firefox.de/forum/thema/126100/?postID=1107070#post1107070
(function () {
if (location != 'chrome://browser/content/browser.xhtml')
return;
let translate = function () {
let browserMM = gBrowser.selectedBrowser.messageManager;
browserMM.addMessageListener('getSelection', function listener(message) {
let t = (message.data !== '');
let e = (document.charset || document.characterSet);
if (t) {
openWebLinkIn('https://translate.google.com/?sl=en&tl=de&text=' + encodeURIComponent(message.data), 'tab');
} else {
openWebLinkIn('https://translate.google.com/translate?u=' + encodeURIComponent(gBrowser.currentURI.spec) + '&hl=de-DE&ie=' + e + '&sl=auto&tl=de-DE', 'tab');
};
browserMM.removeMessageListener('getSelection', listener, true);
});
browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
}
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context-googletranslate';
menuitem.setAttribute('label', '\u00dcbersetzen (Google)');
menuitem.classList.add('menuitem-iconic');
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
let ButtonIcon = "Google.svg";
menuitem.style.listStyleImage = 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + ButtonIcon) + '")';
menuitem.addEventListener('command', translate);
let refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
Und man kann idR sogar den CSS Code im JS weglassen, weil das meistens Fx selber regelt.
Wenn das Symbol (die Grafik) in der richtigen Größe vorliegt.
Wenn man bei SVG eben nicht auf deren Eigenschaften zugreifen will.
Aber Du hast recht, geht auch ohne.