Und wie erstelle ich mir einen neuen, zusätzlichen Separator?
Der soll dann zwischen "Untersuchen" und "Tab schließen" sein.
So eine XXXX, ich wusste das einmal!
Horstmann Ja, eigentlich!
Aber genau dieser eben nicht.
Und wie erstelle ich mir einen neuen, zusätzlichen Separator?
Der soll dann zwischen "Untersuchen" und "Tab schließen" sein.
So eine XXXX, ich wusste das einmal!
Horstmann Ja, eigentlich!
Aber genau dieser eben nicht.
So, habe mal etwas aufgeräumt!
#contentAreaContextMenu > menuseparator:nth-child(127) {
order: 1 !important;
}
#context-inspect,
#context-closetab {
order: 1 !important;
}
#context-media-eme-separator {
order: 1 !important;
}
#languagetool-webextension_languagetool_org-menuitem-_languagetool-menu,
#_ce1a7b4e-0937-4480-b15e-42a996d680b8_-menuitem-_open-in-private-mode,
#_0da2e603-21ba-4422-8049-b6d9e013ed84_-menuitem-_Google,
#savewebpas_jeffersonscher_com-menuitem-_saveWebPas {
order: 1 !important;
}
Alles anzeigen
Nun passt es.
Dass die beiden Separatoren für sich alleine stehen, ist Absicht!
2002Andreas Danke!!
Genau der ist es!
Ok, habe es dank Eurer Hilfe hinbekommen!
Das CSS für das Menü sieht jetzt so aus:
#contentAreaContextMenu > menuseparator:nth-child(127) {
order: 1 !important;
}
#context-closetab {
order: 1 !important;
}
#context-media-eme-separator {
order: 1 !important;
}
#languagetool-webextension_languagetool_org-menuitem-_languagetool-menu {
order: 1 !important;
}
#_ce1a7b4e-0937-4480-b15e-42a996d680b8_-menuitem-_open-in-private-mode {
order: 1 !important;
}
Alles anzeigen
Und das Menü so:
1. ![]()
![]()
Lässt sich der Separator "#contentAreaContextMenu > menuseparator:nth-child(127)"
irgendwie etwas differenzierter ansprechen?
OH ![]()
Muss noch
da rein quetschen!
Danke 2002Andreas soweit war ich auch schon.
Aber ich möchte jene Einträge nicht einfach vom Ende an den Anfang verschieben, sondern mitten rein!
Also genauer gesagt direkt vor dem Eintrag "Untersuchen".
Und das bekomme ich per CSS einfach nicht hin.
Hi, ich bräuchte mal eine Info!
Die Erweiterung "Simple Translate" erstellt zwei Einträge im Kontextmenü,
je nach "Funktion"!
1. Selektor "#simple-translate_sienori-menuitem-_translateText" für "Ausgewählten Text übersetzen"
und
2. Selektor "#simple-translate_sienori-menuitem-_translatePage" für "Diese Seite übersetzen".
Nun sind die immer recht weit am Ende des Menüs und auch nicht immer an der gleichen Position,
hängt davon ab, welche Erweiterung sonst noch so mitmischt.
Wie lassen sich diese Einträge sortieren bzw. jene von "Simple Translate" gänzlich verschieben?
Per CSS habe ich es schon probiert, habe aber den richtigen Kniff nicht gefunden,
oder es geht so eventuell auch gar nicht!
Gäbe es da dann eine Erweiterung, die da irgendwie einspringen könnt?
Aber es funktioniert nicht in v145.0rc1.
Das wäre merkwürdig, denn in der Nightly 146.0a1 funktioniert es.
Und nun zitiere ich mich mal selbst!
Ach herrje, ich glaube, ich tu Boesenfeger unrecht.
Es gibt eine viel ältere Anpassung des Skripts an DeepL!Dazu aber heute Nachmittag mehr. Muss weg.
Ich glaube fast, universum123 hatte es verbrochen! (16. September 2018)
Denn jene Version von Tanni (18. Februar 2018) hat diesen Code noch nicht!
Es ist also höchstwahrscheinlich wirklich so, wie Du Sören Hentzschel es gepostet hast.
Ganze Seiten konnten wohl nie mit DeepL übersetzt werden.
Ach herrje, ich glaube, ich tu Boesenfeger unrecht.
Es gibt eine viel ältere Anpassung des Skripts an DeepL!
Dazu aber heute Nachmittag mehr. Muss weg.
Sören Hentzschel Ok, ich habe mich da ganz offensichtlich missverständlich ausgedrückt!
Ich meine, als ich das Skript für DeepL angepasst habe, damals, funktionierte es.
Deshalb hätte ich, damals, besagte Zeilen Code nicht rausgenommen.
Da ich diese Funktion aber nie nutz(t)e, ist mir halt nie aufgefallen,
dass es irgendwann nicht mehr funktionierte.
Es hat sich ja auch nie irgendwer gemeldet!
Jetzt weiß ich, dass es nicht geht, und habe den Code bereinigt.
Ergo, alles wird gut.
/* ------------------------------------------------------------------------------ */
Nachtrag! Ganz Wichtig![]()
Ich schmücke mich hier mit fremden Federn!!
Nein, die Anpassungen des Skripts an DeepL stammen gar nicht von mir!
Boersenfeger war's! ER ist schuld! ![]()
![]()
![]()
![]()
Ich habe nur das mit den Symbolen angepasst und hinzugefügt.
Mal überarbeitet und bereinigt!
PS. Link im header neu gesetzt!
// 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/139966/?postID=1281813#post1281813
(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 text = (message.data !== '');
if (text) {
openWebLinkIn('https://www.deepl.com/translator#en/de/' + encodeURIComponent(message.data), '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.setProperty('--menuitem-icon', 'url("' + ("file:" + ProfilePath + IconPath + ButtonIcon) + '")');
menuitem.addEventListener('command', translate);
let refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
Was aber nicht funktioniert, ganze Seiten übersetzen zu lassen.
Wie ich bereits schrieb: Das hat mit DeepL noch nie in der kostenlosen Version funktioniert. Dafür musst du mindestens 7,49 € pro Monat bezahlen.
Irgendwann einmal muss es funktioniert haben, sonst hätte ich es ja nicht eingebaut.
Ist aber auch nun egal, es geht nicht, also Code bereinigt!
...
Eigentlich wollte ich mir lediglich nochmal zu Gemüte führen, auf welche Weise es nimmer funktioniert. Und siehe da: es funktioniert einfach wieder.
Tatsache. Da hat DeepL dann doch wieder erbarmen gehabt und die Änderungen teilw. zurückgenommen.
Was aber nicht funktioniert, ganze Seiten übersetzen zu lassen.
D.h. aus dem "alten" Skript können die Zeilen 17 & 18 gelöscht werden.
Mh, leider hatte die letzte Version einen Bug!
Bei mehrmaligen Nutzen der Funktion öffnete sich jedes Mal ein Tab mehr.
Eventuell jetzt:
(function () {
if (location.href !== 'chrome://browser/content/browser.xhtml') return;
let translate = function () {
let browserMM = gBrowser.selectedBrowser.messageManager;
function listener(message) {
let text = message.data;
const deepl__deeplURL = `https://www.deepl.com/translator`;
const browserLang = navigator.language;
const deepl__defaultLang = browserLang.startsWith('de') ? 'en' : 'de';
if (text) {
openWebLinkIn(`${deepl__deeplURL}#${deepl__defaultLang}/${encodeURIComponent(text)}`, 'tab');
}
browserMM.removeMessageListener('getSelection', listener, true);
}
browserMM.addMessageListener('getSelection', listener);
browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
};
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context-DeepLtranslate';
menuitem.setAttribute('label', 'Übersetzen (DeepL)');
menuitem.classList.add('menuitem-iconic');
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
let IconPath = '/chrome/icons/';
let ButtonIcon = "DeepL_2.png";
menuitem.style.setProperty('--menuitem-icon', 'url("file:' + ProfilePath + IconPath + ButtonIcon + '")');
menuitem.addEventListener('command', translate);
let refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
Nachtrag!
Noch etwas "Feintuning" ![]()
// Translate_DeepL.uc.js
(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 text = message.data;
let deepl__selection = getSelection().toString();
const deepl__deeplURL= `https://www.deepl.com/translator#null/`;
const browserLang = navigator.language;
const deepl__defaultLang = browserLang.startsWith('de') ? 'en' : 'de';
if (text) {
openWebLinkIn('https://www.deepl.com/translator#en/de/' + encodeURIComponent(message.data), 'tab');
window.open(`${deepl__deeplURL + deepl__defaultLang}/${encodeURIComponent(deepl__selection).replaceAll("%2F", "\\%2F").replaceAll("%7C", "\\%7C").replaceAll("%5C", "%5C%5C")}`, '_blank');
}
browserMM.storage.onChanged.addListener(getDefaultSettings);
});
browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
};
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context-DeepLtranslate';
menuitem.setAttribute('label', 'Übersetzen (DeepL)');
menuitem.classList.add('menuitem-iconic');
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
let IconPath = '/chrome/icons/';
let ButtonIcon = "DeepL_2.png";
menuitem.style.setProperty('--menuitem-icon', 'url("' + ("file:" + ProfilePath + IconPath + ButtonIcon) + '")');
menuitem.addEventListener('command', translate);
let refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
Ich habe nach langem Hin und Her endlich eine Möglichkeit gefunden, die funktioniert![]()
Hier das "neue" Skript.
// Translate_DeepL.uc.js
(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 text = message.data;
let deepl__selection = getSelection().toString();
const deepl__deeplURL= `https://www.deepl.com/translator#null/`;
const deepl__defaultLang = navigator.language.match(/^(zh-)?\w+/g)[0] || 'en'; // change default language if you want
if (text) {
openWebLinkIn('https://www.deepl.com/translator#en/de/' + encodeURIComponent(message.data), 'tab');
window.open(`${deepl__deeplURL + deepl__defaultLang}/${encodeURIComponent(deepl__selection).replaceAll("%2F", "\\%2F").replaceAll("%7C", "\\%7C").replaceAll("%5C", "%5C%5C")}`, '_blank');
}
browserMM.storage.onChanged.addListener(getDefaultSettings);
});
browserMM.loadFrameScript('data:,sendAsyncMessage("getSelection", content.document.getSelection().toString())', true);
};
let menuitem = document.createXULElement('menuitem');
menuitem.id = 'context-DeepLtranslate';
menuitem.setAttribute('label', 'Übersetzen (DeepL)');
menuitem.classList.add('menuitem-iconic');
let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
let IconPath = '/chrome/icons/';
let ButtonIcon = "DeepL_2.png";
menuitem.style.setProperty('--menuitem-icon', 'url("' + ("file:" + ProfilePath + IconPath + ButtonIcon) + '")');
menuitem.addEventListener('command', translate);
let refItem = document.getElementById('context-inspect');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
Wenn mir jetzt jemand ganz genau erklärt, was wie getestet werden soll, ....
Wurzelknolle Und unter Einstellungen auch "Links in Tabs anstatt in neuen Fenstern öffnen" aktiviert?
Genau so habe ich auch diese Einstellungen.
Wenn ich mich mal einmischen dürfte, ich nutze eine Erweiterung!
Und ich nutze GMX sowie Web.de
Beim Anklicken eines Links öffnet sich ganz einfach ein neuer Tab.
Nein: bitte nicht & nein: ist es nicht & allerdings. Grüße Lionsson
? ![]()
Was für Fragen hast Du noch?
Wenn nichts mehr anliegt, ist in Beitrag #33 alles gesagt.
Entweder die offizielle Erweiterung nutzen
oder mein Skript mit dem Workaround.
Sören Hentzschel Bitte zu machen.
Das Eingangsthema ist erledigt
und der ganze andere Rest, der nichts zum Thema beiträgt,
gehört hier einfach nicht hin.
Danke.
Grundsätzlich kann ich Dir da nicht weiterhelfen,
aber ...
es gibt da eine erweiterung, die Du Dir mal anschauen kannst.
In festen Intervallen erstellt diese ein Backup der geöffneten Seiten (Tabs).
Damit hast Du schon einmal einen Notnagel.