1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. Mira_Belle

Beiträge von Mira_Belle

  • Diskussion über neues Unterforum nur für Skripte

    • Mira_Belle
    • 8. Mai 2025 um 17:08
    Zitat von Sören Hentzschel

    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.

  • Diskussion über neues Unterforum nur für Skripte

    • Mira_Belle
    • 8. Mai 2025 um 16:34

    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.

  • Einbindung von Icons in Skripts

    • Mira_Belle
    • 8. Mai 2025 um 09:26

    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?

  • Einbindung von Icons in Skripts

    • Mira_Belle
    • 7. Mai 2025 um 23:18

    So, mit Fallback.
    Als Muster für andere Skripte.

    JavaScript
    // ------------------------------------------------------------------------------------------------
    	// 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
  • Einbindung von Icons in Skripts

    • Mira_Belle
    • 7. Mai 2025 um 22:58

    Ich zitiere mich mal selber.

    So, ...

    Zitat

    // ------------------------------------------------------------------------------------------------
    // 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) + '")';
    // ------------------------------------------------------------------------------------------------

    Alles anzeigen

    ... und als Fallback so ...

    Zitat

    menuitem.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

  • Einbindung von Icons in Skripts

    • Mira_Belle
    • 7. Mai 2025 um 20:22
    Zitat von milupo

    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:

    JavaScript
    // ------------------------------------------------------------------------------------------------
    	// 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!

  • Einbindung von Icons in Skripts

    • Mira_Belle
    • 7. Mai 2025 um 19:08
    Zitat von 2002Andreas

    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.

  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Mira_Belle
    • 7. Mai 2025 um 18:59

    ?

    Hier beide Skripte, mit korrigierter Grafik!

    JavaScript
    // 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

    JavaScript
    // 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.

  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Mira_Belle
    • 7. Mai 2025 um 18:42

    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?

  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Mira_Belle
    • 7. Mai 2025 um 18:38

    Na dann musst Du einen Platzhalter intern finden!

    Z.B. dieses => menuitem.style.listStyleImage = ' url("chrome://browser/skin/translations.svg")';

  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Mira_Belle
    • 7. Mai 2025 um 17:30

    Endor  2002Andreas

    Hier das fehlende Symbol.

    JavaScript
    	menuitem.style.listStyleImage = ' url("data:image/png;base64,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")';
  • Seltsamer Tab öffnet sich immer wieder

    • Mira_Belle
    • 7. Mai 2025 um 11:29

    Hast Du irgendeine Software neu installiert?
    Oder ein Update einer Software durchgeführt?

  • "Firefox: Nutzerzahlen geben weiter nach" bei Caschys Blog

    • Mira_Belle
    • 7. Mai 2025 um 11:26
    Zitat von TPD-Andy

    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!

  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Mira_Belle
    • 7. Mai 2025 um 10:11
    Zitat von Speravir
    Zitat von Mira_Belle

    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:

    Code
    // ==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 !

    JavaScript
    // 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


    JavaScript
    // 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
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Mira_Belle
    • 6. Mai 2025 um 22:10
    Zitat von Horstmann

    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.

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Mira_Belle
    • 6. Mai 2025 um 21:52

    Und lassen sich so zum Bleistift einbinden.

    JavaScript
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Pfad zum Profilordner und gleich in den entsprechenden Unterordner
        let ButtonIcon = "default_icon.svg"; // Name & Dateiendung des anzuzeigenden Symbols!
        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(`
     
            #browser-toolbox-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") }
            #browser-toolbox-button.toolbarbutton-1.chromeclass-toolbar-additional image.toolbarbutton-icon {
              width: 28px !important;
              height: 28px !important;
              fill: #83ee1a !important;
              fill-opacity: 1 !important;
              }
     
           `), null, null);
     
        sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
    Alles anzeigen
  • Mar Update funktioniert von Version 138.0 auf 138.0.1 nicht mehr

    • Mira_Belle
    • 6. Mai 2025 um 18:22

    Und wenn Du Dir das Setup runterlädst und es manuell versuchst?

  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Mira_Belle
    • 6. Mai 2025 um 12:44

    Endor Kannst Du das Skript in Deine Sammlung aufnehmen?

    Einen gescheiten header muss ich mir noch einfallen lassen,
    oder hast Du eine Idee?

    JavaScript
        // google-context-translate.uc.js (any > de)
    
    
        location.href.endsWith("://browser/content/browser.xhtml") && (async () => {
        await delayedStartupPromise;
    
        var addEventListener = (...args) => {
            var trg = args[3];
            if (!trg) trg = args[3] = window;
            trg.addEventListener(...args);
            this.handlers.push(args);
        };
    
        var initFunction = async function(_id, xhtmlns, addDestructor, addEventListener, gClipboard, LOG) {
            // Hier ist der Code, der ursprünglich als String in new Function() übergeben wurde
            var langFrom_google_text = "auto"; //auto
            var langTo_google_text = "de";
    
            // Assign icons
            var mainicon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADKElEQVR42p2TX2hTdxTHPzfJTW6T3qQmapvWabUbog+udp3kYeLQ4f6wiZQNtjlXHyZaBYe6TekYVGRQYexFscOtuD7UdWxzMtAXEbZStKIbDsaUCbVj9o8mTW+aNrlJbu5vJ8Ex2OMO/Lj87jnne873nO9PSyTV3tkAfYi5NhQ1MB1Ijc3ijN+D7CQh28YK+GHDMyxpjlJTkmAdQi5dWvOsUrYkGB5QC5Kcg/aFBxxqqycmcY38a/1yTqYgMw8ByfFKjtZ4V6myCeW8IApyfOw2155fw1DG4dOJJK1r45x5BPDUpZuMr2uXSuAvgBMQgOitjLJNn7iDSJP0rIJ35dt19TeGoi0Es1MMP72KFvm3+88phuYM3HCd3ObQizpa/cW7Kh020E0Tz1yOUxvjdIr7o6t/cLpkEJqZp7s5zN62ZewfnWLQ9VIIBqodBdI5tIbBG8oKhSAaJZDN8tpSP5+3L8eVgLbeAdKal7NH3mKL3FcOXCfV1ITjc7FLFrWZIlpt/4+qEA7hLRrCwk/RusOXu7ax8xHvGTkVgi/89As/T8ia9EUyghKOWSaYyqNx8oIiuEgcshetsooceibJinvTfNH1DpseD3LHSZE4eprs6k24NQaevI1fF8q5FJqv9xvlmFLdkKZlhb77E8TdIlFD54OOl3mzdXm1k+sP0jzbdwF7cRhsj8ysAWYnpYPeQfXPnn3JJG8/sZT+PW8gkuDbkWEiRh3b29dV/edujNE5dB4nHJSCUrQsTdP9mUKrCKHA5piHK+918quVp/VoD9W9uhGejNRx6+N9VZAmoTJZmhbK4vR7BGDPCQEQ/qU8R15aT2/Hi/R8PcyxyyMyVBmaXwIfPiTVf5yYHiF28ARpOyuqk3nJ4DV2HFc4SamUZ3vrGr7vPlitFNraQc4SzZZt6ptWMv3DAOdGrrGj7yvR+2KYr5A0BeCVAwqvBQuyMG+MTzp3cvj15/ivfXfzNq++/yFEIlD7GFjZ6uPRaE4oGuNQI68jIINJu0QbTFoadIJlL7lSgb8sxbSVEb8geUUVtkh55r50MY5Wec6jibV9/A9LjP7e9TdFQScjW9P1XAAAAABJRU5ErkJggg==";
    
            function GetXmlHttpObject() {
                if (window.XMLHttpRequest) { return new XMLHttpRequest(); }
                if (window.ActiveXObject) { return new ActiveXObject("Microsoft.XMLHTTP"); }
                return null;
            }
    
            var lc = navigator.lastClick = {};
            addEventListener("mouseup", e => {
                if (e.button) return;
                lc.X = e.screenX - mozInnerScreenX;
                lc.Y = e.screenY - mozInnerScreenY;
            }, false, gBrowser.tabpanels || 1);
    
            var createWindow = function(text, status, title, id, pos, size) {
                var win = window, doc = win.document, wId = 'ujs_window' + (id || ''), w = doc.getElementById(wId);
                var keyDown = function(e) {
                    if (!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27) doc.getElementById(wId).closeWin();
                };
                if (w) w.closeWin();
    
                gBrowser.addEventListener("click", function c() {
                    this.removeEventListener("click", c);
                    try { doc.getElementById(wId).closeWin(); } catch (e) {};
                }, true);
    
                w = doc.createElementNS(xhtmlns, 'div');
                w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:2px;margin:0;z-index:99999;overflow:hidden;cursor:move;' + (typeof w.style.borderRadius === 'string' ? 'background-color:#eaeaea;padding-top:0px;border-radius:4px;box-shadow:0 0 15px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");'));
                w.id = wId;
                w.closeWin = function() {
                    doc.removeEventListener('keydown', keyDown, false);
                    this.parentNode.removeChild(this);
                };
                w.addEle = function(str, style) {
                    var ele = doc.createElementNS(xhtmlns, 'div');
                    ele.setAttribute('style', style);
                    if (str) {
                        ele.innerHTML = str;
                        for (var el, all = ele.getElementsByTagName('*'), i = all.length; i--;) {
                            el = all[i];
                            if (/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)) {
                                el.parentNode.removeChild(el);
                            } else {
                                for (var att = el.attributes, j = att.length; j--;) {
                                    if (/^on[a-z]+$/i.test(att[j].name)) att[j].value = '';
                                }
                            }
                        }
                    }
                    return this.appendChild(ele);
                };
                w.addEle1 = function(str, style) {
                    var ele = doc.createElementNS(xhtmlns, 'textarea');
                    ele.setAttribute('style', style);
                    if (str) {
                        ele.innerHTML = str;
                        for (var el, all = ele.getElementsByTagName('*'), i = all.length; i--;) {
                            el = all[i];
                            if (/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)) {
                                el.parentNode.removeChild(el);
                            } else {
                                for (var att = el.attributes, j = att.length; j--;) {
                                    if (/^on[a-z]+$/i.test(att[j].name)) att[j].value = '';
                                }
                            }
                        }
                    }
                    return this.appendChild(ele);
                };
                var img = doc.createElementNS(xhtmlns, 'div');
                img.setAttribute('style', 'display:block;float:right;width:22px;height:22px;padding:0;margin-top:2px;margin-right:1px;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAIAAABL1vtsAAAACXBIWXMAAArEAAAKxAFmbYLUAAABc0lEQVQ4y2P84mzGQBlgYaAYoBjBrKn79/plgnrQlCGM4Jwwj0lC6kdjKX5TmDV1Oeq7/7149r0gCcUIZk1dJgkpBgYGjvruXyvm/96wErt+fWOOylYGBgYmCSm4WxjhwQkxHsL+vW39r0Uz0f3s6M6eVsDAyMjAwIDsWEbkGGHW1OWoaGFgZ8c0BaH///8fHbV/L56BSzGiRSqztj5HWROaKcj6f86e+GffDmQtjJjpAs2Uf48f4NGP3Qg0U6AAh36cRkBNqWhmYGWDcH/OmoBVP77UySgmwcDCCucyyciTlsCRw4/hz28GVjZWr0AGBgbMmMZuBFr4/3/5nKOskYGdA5cp6GGBNf6YtfUhpmBNdShGsFjas+dVYI0/ZFN+zZ/2e+cmLEYgEjiO+MNlCtQI5Azyc1L7n2MHsQYzk4o6Z8tECBtuCjQ4/16//O/FM4KZ/d+dm99r8jlbJv69eRXdFSQVOUwq6v/u3CScOuladgIAhMrZgyTDTBwAAAAASUVORK5CYII=");background:-o-skin("Caption Close Button Skin");');
                img.title = (win.navigator.language.indexOf('de') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close';
                img.addEventListener('click', function() { this.parentNode.closeWin(); }, false);
                w.appendChild(img);
                var title = w.addEle(title, 'display:table;color:#000;font:17px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
                title.onclick = e => {
                    e.preventDefault();
                    var url = e.target.href;
                    var ctabpos = gBrowser.selectedTab._tPos + 1;
                    gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos);
                    doc.getElementById(wId).closeWin();
                };
                var cnt = w.addEle1(text, 'display:block;border:1px solid #aaa;padding-bottom:3px;padding-left:3px;background-color:#f2ffe6;color:#8c0023;font:24px Times New Roman;width:600px;height:200px;overflow:auto;cursor:text;-moz-user-focus:normal;-moz-user-select:text;');
                cnt.contentEditable = "true";
                cnt.context = "contentAreaContextMenu";
                w.addEle(status, 'display:table;font:14px Times New Roman;font-weight:bold;color:blue;width:auto;height:auto;padding-top:2px;margin:0 3px;cursor:pointer;');
                w.addEventListener('mousedown', function(e) {
                    if (e.target == w) {
                        e.preventDefault();
                        var st = w.style;
                        var mouseMove = e => {
                            st.top = parseInt(st.top) + e.movementY + "px";
                            st.left = parseInt(st.left) + e.movementX + "px";
                        };
                        doc.addEventListener('mousemove', mouseMove, false);
                        doc.addEventListener('mouseup', function() { doc.removeEventListener('mousemove', mouseMove, false); }, false);
                    }
                }, false);
                doc.documentElement.appendChild(w);
    
                if (size) {
                    cnt.style.height = size.height;
                    cnt.style.width = size.width;
                } else {
                    for (var i = 3; i < 10; i++) {
                        if (cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth) {
                            cnt.style.height = 80 * i + 'px';
                            cnt.style.width = 160 * i + 'px';
                        } else break;
                    }
                };
                var docEle = (doc.compatMode == 'CSS1Compat' && win.postMessage) ? doc.documentElement : doc.body;
                var mX = docEle.clientWidth - w.offsetWidth, mY = docEle.clientHeight - w.offsetHeight;
                if (mX < 0) { cnt.style.width = parseInt(cnt.style.width) + mX + 'px'; mX = 0 };
                if (mY < 0) { cnt.style.height = parseInt(cnt.style.height) + mY + 'px'; mY = 0 };
                var hW = parseInt(w.offsetWidth / 2);
                w.style.left = (pos && pos.X < mX + hW ? (pos.X > hW ? pos.X - hW : 0) : mX) + 'px';
                w.style.top = (pos && pos.Y + 10 < mY ? pos.Y + 10 : mY) + 'px';
                w.style.visibility = 'visible';
                doc.addEventListener('keydown', keyDown, false);
                return w;
            };
    
            var getHash = function(txt) {
                var TKK = ((function() {
                    var a = 817046147;
                    var b = -335196159;
                    return 410049 + '.' + (a + b);
                })());
    
                function sM(a) {
                    var b;
                    if (null !== yr)
                        b = yr;
                    else {
                        b = wr(String.fromCharCode(84));
                        var c = wr(String.fromCharCode(75));
                        b = [b(), b()];
                        b[1] = c();
                        b = (yr = window[b.join(c())] || "") || "";
                    }
                    var d = wr(String.fromCharCode(116));
                    var c = wr(String.fromCharCode(107));
                    d = [d(), d()];
                    d[1] = c();
                    c = "&" + d.join("") + "=";
                    d = b.split(".");
                    b = Number(d[0]) || 0;
                    for (var e = [], f = 0, g = 0; g < a.length; g++) {
                        var l = a.charCodeAt(g);
                        128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023),
                            e[f++] = l >> 18 | 240,
                            e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224,
                            e[f++] = l >> 6 & 63 | 128),
                            e[f++] = l & 63 | 128);
                    }
                    a = b;
                    for (f = 0; f < e.length; f++)
                        a += e[f],
                        a = xr(a, "+-a^+6");
                    a = xr(a, "+-3^+b+-f");
                    a ^= Number(d[1]) || 0;
                    0 > a && (a = (a & 2147483647) + 2147483648);
                    a %= 1E6;
                    return c + (a.toString() + "." + (a ^ b));
                }
                var yr = null;
                var wr = function(a) {
                    return function() {
                        return a;
                    };
                };
                var xr = function(a, b) {
                    for (var c = 0; c < b.length - 2; c += 3) {
                        var d = b.charAt(c + 2);
                        d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d);
                        d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
                        a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d;
                    }
                    return a;
                };
                return sM(txt);
            };
    
            var ujs_google_translat = function(dir) {
                var lng = 'de';
                var txt = gClipboard.read();
                var l = dir.split('|');
                var encTxt = encodeURIComponent(txt);
                var winWait = function(lng) { createWindow('', (lng == 'de' ? 'Warten bis der Text übersetzt ist' : 'Wait, is going Translating') + '\u2026', 'Google Translate', '_gt', window.navigator.lastClick); };
                if (txt) {
                    winWait(lng);
                    var xhr = new XMLHttpRequest();
                    var url = 'https://translate.google.com/translate_a/single?client=gtx&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt);
                    var urlt = "http://translate.google.com/translate_t?text=" + encTxt + "&sl=" + l[0] + "&tl=" + l[1] + "&hl=" + lng + "&eotf=0&ujs=gtt";
                    xhr.open('POST', url, true);
                    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
                    xhr.onreadystatechange = function() {
                        try {
                            if (xhr.readyState == 4 && xhr.status == 200) {
                                var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0').replace(/\\n/g, "<br />"));
                                for (var i = 0, n; n = tmp[0][i]; i++) {
                                    if (n[0]) result += n[0].toString();
                                };
                                status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase();
                                createWindow(result, status, '<a href="' + urlt.replace(/&/g, '&amp;') + '" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:22px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick);
                            }
                        } catch (x) { LOG(x); };
                    };
                    xhr.send('q=' + encodeURIComponent(txt));
                };
            };
    
            var ujs_google_translate = function() {
                var lng = 'de';
                var txt = gContextMenu.selectionInfo.fullText;
                var encTxt = encodeURIComponent(txt);
                var winWait = function(lng) { createWindow('', (lng == 'de' ? 'Warten bis der Text übersetzt ist' : 'Wait, is going Translating') + '\u2026', 'Google Translate', '_gt', window.navigator.lastClick); };
                if (txt) {
                    winWait(lng);
                    var xhr = new XMLHttpRequest();
                    var url = 'https://translate.google.com/translate_a/single?client=gtx&sl=' + langFrom_google_text + '&tl=' + langTo_google_text + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt);
                    var urlt = "http://translate.google.com/translate_t?text=" + encTxt + "&sl=" + langFrom_google_text + "&tl=" + langTo_google_text + "&hl=" + lng + "&eotf=0&ujs=gtt";
                    xhr.open('POST', url, true);
                    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
                    xhr.onreadystatechange = function() {
                        try {
                            if (xhr.readyState == 4 && xhr.status == 200) {
                                var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0').replace(/\\n/g, "<br />"));
                                for (var i = 0, n; n = tmp[0][i]; i++) {
                                    if (n[0]) result += n[0].toString();
                                };
                                status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + langTo_google_text.toUpperCase();
                                createWindow(result, status, '<a href="' + urlt.replace(/&/g, '&amp;') + '" target="_blank" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:#009;font:22px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick);
                            }
                        } catch (x) { LOG(x); };
                    };
                    xhr.send('q=' + encodeURIComponent(txt));
                };
            };
    
            (function() {
                if (document.getElementById("TranslateBufer")) return;
                var contextMenu = document.getElementById("contentAreaContextMenu");
                var Item = document.createXULElement("menuitem");
                Item.setAttribute("label", "Translate from clipboard");
                Item.setAttribute("class", "menuitem-iconic");
                Item.setAttribute("image", mainicon);
                Item.addEventListener("command", function() { ujs_google_translat('auto|de'); }, false);
                contextMenu.insertBefore(Item, document.getElementById("context-viewpartialsource-selection"));
                addDestructor(function() { contextMenu.removeChild(Item); });
            })();
    
            (function() {
                if (document.getElementById("TranslateSelected")) return;
                var contextMenu = document.getElementById("contentAreaContextMenu");
                var Item = document.createXULElement("menuitem");
                Item.setAttribute("id", "TranslateSelected");
                Item.setAttribute("label", "Translate selected text");
                Item.setAttribute("class", "menuitem-iconic");
                Item.setAttribute("image", mainicon);
                Item.addEventListener("command", function() { ujs_google_translate(); }, false);
                contextMenu.insertBefore(Item, document.getElementById("context-viewpartialsource-selection"));
                addDestructor(function() { contextMenu.removeChild(Item); });
    
                addEventListener("popupshowing", function() {
                    Item.hidden = !gContextMenu.isTextSelected;
                }, false, contextMenu);
            })();
        };
    
        // Initialize handlers array
        this.handlers = [];
    
        initFunction("cbinit-google-translate", "http://www.w3.org/1999/xhtml", () => {}, addEventListener, { read: readFromClipboard }, Cu.reportError);
        window.addEventListener("unload", this, { once: true });
    })();
    Alles anzeigen
  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Mira_Belle
    • 6. Mai 2025 um 11:41


    Mh, ok, stimmt schon, dennoch hätte ich es überprüfen müssen (sollen).

  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Mira_Belle
    • 6. Mai 2025 um 11:22
    Zitat von milupo

    So ist es, wenn man sich auf die KD verlässt, die künstliche Dummheit. :D

    Blödsinn. Dank KI gibt es nun eine verbesserte Version des Skripts!
    Ok, überprüfen hätte ich die Antwort von "chaty" schon sollen.
    Es war dann mein Fehler, nicht der, der KI.

    Wobei ich schon das Gefühl habe, dass "die Französin" besser ist.

    Hast Du das "neue" Skript mal getestet?

    lenny2 A new version of your script, without security.allow_unsafe_dangerous_privileged_evil_eval set to true!

Unterstütze uns!

Jährlich (2026)

69,4 %

69,4% (538,17 von 775 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon