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

Beiträge von bege

  • Wie ein unsigniertes, nicht mehr gewartetes Add-on retten?

    • bege
    • 14. Dezember 2015 um 18:14
    Zitat von Boersenfeger

    Hinsichtlich der Anpassung des Suchfeldes weise ich nochmal auf die Erweiterung CTR hin,
    https://addons.mozilla.org/de/firefox/add…icthemerestorer
    (siehe auch Beitrag 5 + 13)

    Vielleicht habe ich bezüglich CTR noch was nicht verstanden. Ich habe Endors Beitrag https://www.camp-firefox.de/forum/viewtopi…=990819#p990819 so verstanden, dass ab FF43 CTR zwar das alte Suchfenster wieder herstellen kann, OSE damit aber nicht zurecht kommt. Mir geht es ja nicht nur um das alte Suchfenster, sondern eben um die Möglichkeit, die Suchmaschinen in Ordnern zu organisieren, also das Add-on OSE weiter zu verwenden.

  • Wie ein unsigniertes, nicht mehr gewartetes Add-on retten?

    • bege
    • 13. Dezember 2015 um 16:46
    Zitat von Sören Hentzschel

    Der Punkt hier ist aber, dass Mozilla nichts mit dem Add-on zu tun hat. Mozilla kann nur den Standardumfang von Firefox für bestimmte Anwendungsfälle optimieren. Wenn du ein Add-on verwendest, ist es einzig und allein die Aufgabe des Entwicklers besagten Add-ons, sein Add-on anzupassen.

    Und ja, Firefox muss selbstverständlich primär für die Nutzer optimiert werden, welche die Mehrheit und nicht die Minderheit sind, das versteht sich ja von selbst. So viele andere wären froh, wenn man selbst noch viel mehr nachinstallieren müsste und Firefox dafür nur als schlankes Basispaket ausgeliefert würde. Das entspricht nicht unbedingt meinem Wunschdenken, ist aber ein in gleicher Weise berechtigter Standpunkt.

    Mozilla hat mal damit geworben (und tut es immer noch?), wie toll sich der Firefox anpassen lässt. Das ist mit einigen Entscheidungen von Mozilla gerade für Entwickler immer schwieriger geworden, was dazu geführt hat, dass nützliche Add-ons nicht mehr weiterentwickelt werden und andere hinter den Veränderungen hinterherrennen. In diesem Zusammenhang finde ich die Aussage "einzig und allein die Aufgabe des Entwicklers" ziemlich schwach. Wie gesagt, man hätte die Entwicklung offener halten können. Ist nicht passiert. Statt es einfach dem Nutzer zu überlassen, ob er vorhandene sinnvoller Features wie die Add-on-bar verwenden will, wird dann Pocket integriert, das ich seit Jahren (offline) als Add-on benutze. Ich verstehe es jedenfalls nicht. Wir müssen das hier auch nicht ausdiskutieren, weil hier nicht die Entscheidungen getroffen werden. Ich musste es halt in diesem Zusammenhang als off topic Bemerkung los werden.

  • Wie ein unsigniertes, nicht mehr gewartetes Add-on retten?

    • bege
    • 13. Dezember 2015 um 15:41
    Zitat von Sören Hentzschel

    Ich hab keine Zahlen dazu, aber von meinem Gefühl her würde ich sagen, dass der Trend durchaus dahin geht, mehr als ein Suchmaschine zu nutzen. Sei es eine Suche direkt bei Wikipedia durchzuführen, oder nach Produkten bei Amazon suchen. Und das Nutzen mehrerer Suchmaschinen ist halt der Anwendungsfall, für den Mozilla Firefox optimierne wollte. Nur hatte der Vertrag zwischen Mozilla und Google ausgeschlossen, dass es Veränderungen an der "Search Experience" in Firefox gibt. Mit Yahoo! als stärkstem Partner ist das nun umgekehrt: die optimieren sogar ihre eigene Suche für Firefox-Nutzer.

    Deine Erklärung spricht für mich genau gegen diese Entscheidung von Mozilla. Eben weil ich nicht nur verschiedene Suchmaschinen nutze, sondern auch über die Suchleiste die Suchen vieler Websites nutze, brauche ich das Add-on Organize Search Engines, um die Suchen in Ordnern zu organisieren. Ohne das wird das Suchfenster total unübersichtlich. Und als Suchmaschinen nutze ich Duckduckgo und Startpage. Ich kann Endors Hoffnung auf ein neues Add-on nur unterstützen - und mich weiter ärgern, dass Mozilla seine Entwicklung nicht offener hält. (Warum z.B. braucht es ein zusätzliches Add-on, nur um die Add-on-bar zu behalten? Das ließe sich auch über das Einstellungen-Menü regeln. So bleibt bei mir der Eindruck, dass der Firefox auf Teufel-komm-raus für unerfahrene Nutzer optimiert wird und die anderen sich mit Basteleien herumschlagen müssen, die bei jedem zweiten Update nicht mehr funktionieren.)

  • Wie ein unsigniertes, nicht mehr gewartetes Add-on retten?

    • bege
    • 12. Dezember 2015 um 13:53
    Zitat von Endor

    Die Sache hat nur einen Haken, ab Firefox 43 gibt es den Schalter zum umschalten
    auf das alte Suchfenster nicht mehr. Wurde entfernt. Sauerei.....
    Solltest Du die Erweiterung Classic Theme Restorer verwenden, da gibt es
    die Möglichkeit das alte Suchfenster wieder teilweise zu bekommen.
    Leider kann Organize Search Engines das aber nicht ansprechen.

    Mfg.
    Endor


    Heißt das, dass ich dann nur eine lange Liste von Suchmaschinen im Suchfenster habe, wie eben ohne Organize Search Engines? Die Freude, das Add-on signiert gefunden zu haben, dauert also nur bis FF43?

    Off topic: Au Mann, es kotzt mich an, welche "Philosophie" Mozilla seit Australis vertritt: Wir entscheiden, was für dich gut ist.

  • Wie ein unsigniertes, nicht mehr gewartetes Add-on retten?

    • bege
    • 11. Dezember 2015 um 10:29

    Tausend Dank, Endor. Dass die Lösung gleich um die Ecke wartet, hätte ich nicht zu hoffen gewagt. Jetzt sind doch tatsächlich alle meine "überlebenswichtigen" Add-ons signiert. FF 43 kann kommen :D

  • Wie ein unsigniertes, nicht mehr gewartetes Add-on retten?

    • bege
    • 11. Dezember 2015 um 09:46

    Hallo,
    ich nutze mit Classic Theme Restorer das alte Suchfenster und dafür das Add-on Organise Search Engines. Es ist nicht signiert und wird nicht mehr gewartet (ist ganz aus AMO verschwunden).
    Beim Versuch, es für den Eigengebrauch selbst signieren zu lassen, wird es mit folgenden Warnungen abgelehnt:

    • on* attribute being set using setAttribute
    • Access to the `eval` global
    • Access to the `Function` global
    • Assignment of unwrapped JS Object's properties


    Da ich nicht JS programmieren kann, habe ich selbst keine Chance. Gibt es noch irgend eine Chance, das Add-on für den Eigengebrauch signieren zu lassen? Oder weiß jemand ein entsprechendes Add-on? Ich habe keines gefunden.
    Danke.
    Gruß
    bege

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

    • bege
    • 5. September 2015 um 15:26
    Zitat von Mithrandir

    Hallo Endor, Hallo aborix,

    alle Updates sind jetzt auf Github, auch das neueste "openbookModoki".

    Vielen Dank an euch drei!

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

    • bege
    • 2. September 2015 um 19:07

    OpenBookModoki geht bei mir seit FF 40 nicht mehr. Beim Klick auf den Stern-Button passiert nichts. Ist das Skript deaktiviert, öffnet sich das Standard-Fenster zum Editieren. Ist das bei euch auch so?

  • Add-ons müssen signiert sein

    • bege
    • 29. Mai 2015 um 17:51

    Danke für die Hinweise zur Signierung der Add-ons. Ich habe mich schon lange gefragt, wie ich mich vor unsicheren Add-ons schützen kann. Bisher nur nach dem Prinzip Hoffnung. Dass alte oder geänderte Add-ons mit der Signierung über einen eigenen AMO-Account weiter genutzt werden können, beruhigt mich und ist für mich zumutbar. In diesem Falle halte ich die Änderung für sinnvoll und akzeptabel, anders als die Änderungen, die nur durch CTR wieder rückgängig gemacht werden können. Da habe ich mich als User, der sich auch hier öfter tummelt, schikaniert und gemaßregelt gefühlt.

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

    • bege
    • 7. Mai 2015 um 16:48
    Zitat von Endor

    Hallo bege.
    Bitte mal testen:
    http://dl.dropbox.com/u/15467633/Fir…panel_1.3.uc.js

    Diese Version funktioniert bei mir.
    Wenn sie bei Dir auch funktioniert, bitte ich Mithrandir diese Version hoch zu laden.
    Habe gerade gesehen, das ist ja genau die selbe Version wie bei Github. :-??
    Wie gesagt, die funktioniert hier einwandfrei.
    Mfg.
    Endor

    Alles anzeigen

    Jetzt weiß ich auch, warum das Panel für dieses Skript bei mir nicht angezeigt wurde. Was ist denn "base64_Btn" in Zeile 44? Das gibt es in meiner Adressleiste nicht. Setze ich dort ein existierendes Icon ein, wird das Zoom-Panel angezeigt.

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

    • bege
    • 7. Mai 2015 um 16:30

    Klappt wunderbar, Endor. Da das Panel in den Addon-Leisten, wenn die Zuordnung "insert.Before" nicht passt, einfach am Ende platziert wird, dachte ich, das müsste in der Adressleiste auch so sein. Ist wohl nicht so. Jetzt wird es bei mir an allen Positionen korrekt angezeigt.
    Danke für die Anpassung.
    Gruß
    bege

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

    • bege
    • 7. Mai 2015 um 15:13

    Hallo,

    kleiner Fehler in MemoryMonitorMod Zeile 28:
    Die ID für die CTR-Addon-bar heißt schon lange "ctraddon_addon-bar"

    Kleine Fußangel in den Zeilen 27 und 28:
    Wenn man eine Zeile einkommentiert und den Kommentar am Zeilenende übersieht, geht's nicht. Deshalb besser, wie in Zeile 25, den Kommentar auch hier auskommentieren.

    (Die Position in der Adressleiste wird bei mir nicht angezeigt, aber da verschwindet bei mir noch anderes, deshalb kann es an meinem Profil liegen.)

    Gruß
    bege

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

    • bege
    • 5. Mai 2015 um 18:26
    Zitat von Endor

    Hallo bege.
    Bitte mal testen:
    http://dl.dropbox.com/u/15467633/Fir…panel_1.3.uc.js

    Diese Version funktioniert bei mir.
    Wenn sie bei Dir auch funktioniert, bitte ich Mithrandir diese Version hoch zu laden.
    Habe gerade gesehen, das ist ja genau die selbe Version wie bei Github. :-??
    Wie gesagt, die funktioniert hier einwandfrei.
    Mfg.
    Endor

    Alles anzeigen


    Danke Endor. Ich hatte vorsichtshalber nochmal die Version von Github heruntergeladen. Dann liegt es also an etwas anderem und die Sucherei beginnt :traurig:

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

    • bege
    • 5. Mai 2015 um 11:07

    Das Skript statusbarzoompanel tut bei mir schon länger nichts mehr. Kann das jemand bestätigen, oder läuft es bei euch?

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

    • bege
    • 4. Mai 2015 um 15:48

    Da das Forum keinen Danke-Button hat, auch von mir ein großes Dankeschön per Post.
    :):D:klasse:

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

    • bege
    • 26. April 2015 um 17:08
    Zitat von Endor

    Hallo zusammen.
    Technisches Update für das Script UserScriptloader.uc.js.
    Es wurden einige Anpassungen gemacht, damit es wieder geschmeidig funktioniert. :wink:


    Vielen Dank für die Aktualisierung.
    Bitte, könntet ihr noch die Option einfügen, dass der Button in der Toolbar landet? Ich hatte das bei mir mit aborix' Hilfe eingebaut. Dann bräuchte ich das bei Updates nicht wieder einfügen und müsste nur die Auskommentierung ändern. Der Abschnitt sieht dann so aus (die Auskommentierung ist hier für den Toolbar-Button gesetzt).

    Code
    USL.init = function(){
    	USL.loadSetting();
    	USL.style = addStyle(css);
    
    
    	   USL.icon = document.createElement('toolbarbutton');
           USL.icon.id = 'UserScriptLoader-icon';
           USL.icon.className = 'toolbarbutton-1 chromeclass-toolbar-additional';
           USL.icon.setAttribute('context', 'UserScriptLoader-popup');
           USL.icon.setAttribute('onclick', 'USL.iconClick(event)');
    	   USL.icon.setAttribute('label', '    UserScriptLoader');
    	   USL.icon.style.padding = '0px 2px';
    
    
           document.getElementById('navigator-toolbox').palette.appendChild(USL.icon);
    
    
           var toolbars = Array.slice(document.querySelectorAll('toolbar'));
           for (var i=0; i<toolbars.length; i++) {         
              var currentset = toolbars[i].getAttribute('currentset');     
              if (currentset.split(',').indexOf(USL.icon.id) >= 0) {     
                 var j;
                 if (i == 0) j = 1
                 else j = 0;         
                 toolbars[j].currentSet += ',' + USL.icon.id;         
                 toolbars[i].currentSet = currentset;     
              };     
           };
    
    /*
    	USL.icon = $('status-bar').appendChild($C("statusbarpanel", {
    		id: "UserScriptLoader-icon",
    		class: "statusbarpanel-iconic",
    		context: "UserScriptLoader-popup",
    		onclick: "USL.iconClick(event);"
    	}));
    
    
    	USL.icon = $('urlbar-icons').appendChild($C("image", {
    		id: "UserScriptLoader-icon",
    		context: "UserScriptLoader-popup",
    		onclick: "USL.iconClick(event);",
    		style: "padding: 0px 2px;",
    	}));
    */
    Alles anzeigen


    Oder lässt sich die Auswahl, welcher Button verwendet wird, vielleicht mit einer Variable am Anfang setzen?

    Außerdem habe ich diese Tooltip-Texte:

    Code
    var DISABLED = true;
    USL.__defineGetter__("disabled", function() DISABLED);
    USL.__defineSetter__("disabled", function(bool){
    	if (bool) {
    		this.icon.setAttribute("state", "disable");
    	  // gBrowser.mPanelContainer.removeEventListener("DOMWindowCreated", this, false);
    		this.icon.setAttribute("tooltiptext", "inaktiv: Linksclick aktiviert, Rechtsclick Menü");
    	} else {
    		this.icon.setAttribute("state", "enable");
    	  // gBrowser.mPanelContainer.addEventListener("DOMWindowCreated", this, false);
    		this.icon.setAttribute("tooltiptext", "aktiv: Linksclick deaktiviert, Rechtsclick Menü");
    	}
    	return DISABLED = bool;
    });
    Alles anzeigen


    Könntet ihr die mit ins Skript aufnehmen?

    Mit diesen Änderungen funktioniert das Skript bei mir, sollte also keine Fehler enthalten.
    Vielen Dank.

    Hier ist die ganze Datei zum Download
    UserScriptLoader.uc.js.txt

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

    • bege
    • 12. März 2015 um 19:25
    Zitat von Mithrandir

    SaveUserChromeJS.uc.js wurde aktualisiert mit Übersetzung hochgeladen. Ich habe noch ein bis vier Änderungen vorgenommen, s. z.B. Access-Keys in showInstallMessage und Kommentar in Zeile 212.

    Linksklick auf "Installieren" geht bei mir nicht. Geht das bei jemand anders?

    Hier noch Übersetzungsvorschläge für die Einstellungsoptionen:
    Zeile 14:

    Code
    Standard: "true". Nach dem Speichern wird gefragt, ob ein Neustart durchgeführt werden soll.


    Zeile 17:

    Code
    Standard: "false". Die erfolgreiche Speicherung wird angezeigt und gefragt, ob ein Neustart durchgeführt werden soll. Wird diese Option auf "true" gesetzt, werden nach dem Speichern zwei Möglichkeiten angezeigt: Neustart oder Weitermachen ohne Neustart (nur bei uc.js-Skripten). Ohne Neustart können Skripte unter Umständen nicht funktionieren.


    Zitat von Mithrandir


    BTW: die Codes hier im Forum sind doof, um sie ins GitHub zu übernehmen. Die führenden Leerzeichen in jeder Zeile würden zu schlechten Ergebnissen in den diff-Ansichten führen (jede Zeile wäre geändert). Deshalb bitte immer irgendwo hochladen, sodass die Dateien nicht aufgebläht werden.

    Ich nehme mir vor, dran zu denken.

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

    • bege
    • 10. März 2015 um 18:09
    Zitat von aborix

    http://www.xup.in/dl,15722903/SaveUserChromeJS_0.4.uc.js/

    Übersetzung ins Deutsche ist noch nicht enthalten.

    Funktioniert mit Rechtsklick auf die Buttons (Kontextmenü) und über "Raw". Sogar der Neustart geht, der bei mir seit einer Weile nicht mehr ging.
    Danke, aborix :)

    Mit Linksklick auf den Installieren-Button ging es bei mir nur ein mal, nach Neustart nicht mehr.

    Hier mit Übersetzung.
    In der alten Übersetzung war ein Fehler "(mit Neustart)". Die Meldung wird aber angezeigt, wenn am Anfang des Skripts "runWithoutRestart" auf "true" gesetzt wird. Im Japanischen ist dann noch eine Erklärung, dass ein Neustart ausgeführt werden soll, falls das Skript nicht richtig funktioniert. Das passt im Deutschen aber nicht in die Schaltfläche, ist viel zu lang. Deshalb habe ich nur "(ohne Neustart)" übersetzt.
    Diese Option sollte auf der github-Seite vielleicht noch erklärt werden.

    Code
    // ==UserScript==
    // @name           SaveUserChromeJS.uc.js
    // @author         ywzhaiqi
    // @description    像 Greasemonkey 一样保存 uc脚本
    // @include        main
    // @charset        UTF-8
    // @version        0.4
    // @homepageURL    https://github.com/ywzhaiqi/userChromeJS/tree/master/SaveUserChromeJS
    // @reviewURL      http://bbs.kafan.cn/thread-1590873-1-1.html
    // ==/UserScript==
    
    
    (function() {
    
    
    // 保存完毕是否启用通知?
    var notificationsAfterInstall = true;
    
    
    // 保存完毕是否加载脚本(无需启动)?仅支持 .uc.js,一些脚本有问题。
    var runWithoutRestart = false;
    
    
    
    
    let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
    if (!window.Services) Cu.import("resource://gre/modules/Services.jsm");
    
    
    if(typeof window.saveUserChromeJS != "undefined"){
    	window.saveUserChromeJS.uninit();
    	delete window.saveUserChromeJS;
    }
    
    
    const RE_USERCHROME_JS = /\.uc(?:-\d+)?\.(?:js|xul)$|userChrome\.js$/i;
    const RE_CONTENTTYPE = /text\/html/i;
    
    
    var ns = window.saveUserChromeJS = {
    	_menuitem: null,
    	get SCRIPTS_FOLDER() {
    		delete this.SCRIPTS_FOLDER;
    		return this.SCRIPTS_FOLDER = Services.dirsvc.get("UChrm", Ci.nsILocalFile);
    	},
    
    
    	init: function() {
    		Services.obs.addObserver(this, "content-document-global-created", false);
    
    
            // add contentAreaContextMenu
            var contextMenu = $("contentAreaContextMenu");
            var menuitem = this.createMenuitem();
    		contextMenu.insertBefore(menuitem, contextMenu.firstChild);
    		contextMenu.addEventListener("popupshowing", this, false);
    
    
            this._menuitem = menuitem;
    	},
    	uninit: function(){
    		Services.obs.removeObserver(this, "content-document-global-created");
    
    
            if(this._menuitem){
                this._menuitem.parentNode.removeChild(this._menuitem);
            }
    
    
            $("contentAreaContextMenu").removeEventListener("popupshowing", this, false);
    	},
    	handleEvent: function(event){
    		switch(event.type){
    			case "popupshowing":
    				if (event.target != event.currentTarget) return;
    				if(gContextMenu.onLink){
    					this._menuitem.hidden = !RE_USERCHROME_JS.test(gContextMenu.linkURL);
    				}else{
    					this._menuitem.hidden = true;
    				}
    				break;
    		}
    	},
    	observe: function(aSubject, aTopic, aData) {
    		switch (aTopic) {
    			case "content-document-global-created":
    				let safeWin = aSubject;
    				let chromeWin = this.getBrowserForContentWindow(safeWin).wrappedJSObject;
    				if (!chromeWin) return;
    
    
    				let gBrowser = chromeWin.gBrowser;
    				if (!gBrowser) return;
    
    
                    let lhref = safeWin.location.href;
                    if(lhref.startsWith("view-source")) return;
    
    
    				// Show the scriptish install banner if the user is navigating to a .user.js
    				// file in a top-level tab.
    				if (safeWin === safeWin.top && RE_USERCHROME_JS.test(lhref) && !RE_CONTENTTYPE.test(safeWin.document.contentType)) {
                        safeWin.setTimeout(function(){
    						ns.showInstallBanner(gBrowser.getBrowserForDocument(safeWin.document));
    					}, 500);
    				}
    
    
                    if(safeWin.location.hostname == 'github.com'){
                        safeWin.addEventListener("DOMContentLoaded", function(){
                            ns.github_addButton(safeWin.document);
    
    
                            // github 用了 history.pushstate, 需要加载页面后重新添加按钮
                            // 2014-7-15:firefox 33(nightly)如果引用了 unsafeWindow.$ 就会崩溃
                            // 详见 http://tieba.baidu.com/f?ct=335675392&tn=baiduPostBrowser&z=3162087505&sc=53663075812#53663075812
                            if (Services.appinfo.version < 33) {
                                ns.github_addListener(safeWin);
                            }
                        }, false);
                    }
    
    
    				break;
    		}
    	},
    	createMenuitem: function(){
    		var menuitem = $C("menuitem", {
    			id: "uc-install-menu",
    			label: "Installieren für userChromeJS...",
    			accessKey: "I",
    			oncommand: "saveUserChromeJS.saveScript(gContextMenu.linkURL)"
    		});
    
    
    		return menuitem;
    	},
    	showInstallBanner: function(browser) {
    		var notificationBox = gBrowser.getNotificationBox(browser);
    		var greeting = "Das ist ein userChrome Script. Klicken Sie auf Installieren, um es zu verwenden. Nach dem Speichern im Chrome Ordner bitte einen Neustart durchführen.";
    		var btnLabel = "Installieren";
    
    
    		// Remove existing notifications. Notifications get removed
    		// automatically onclick and on page navigation, but we need to remove
    		// them ourselves in the case of reload, or they stack up.
    		for (var i = 0, child; child = notificationBox.childNodes[i]; i++)
    			if (child.getAttribute("value") == "install-userChromeJS")
    				notificationBox.removeNotification(child);
    
    
    		var notification = notificationBox.appendNotification(
    			greeting,
    			"install-userChromeJS",
    			null,
    			notificationBox.PRIORITY_WARNING_MEDIUM, [{
    				label: btnLabel,
    				accessKey: "I",
    				popup: null,
    				callback: this.saveCurrentScript
    			}
    		]);
    	},
    	github_addButton: function(doc){
    		if(doc.getElementById("uc-install-button")) return;
    
    
    		var rawBtn = doc.getElementById("raw-url");
    		if(!rawBtn) return;
    
    
    		var downURL = rawBtn.href;
    		if(!RE_USERCHROME_JS.test(downURL)) return;
    
    
    		var installBtn = doc.createElement("a");
    		installBtn.setAttribute("id", "uc-install-button");
    		installBtn.setAttribute("class", "minibutton");
    		installBtn.setAttribute("href", downURL);
    		installBtn.innerHTML = "Installieren";
    		installBtn.addEventListener("click", function(event){
    			event.preventDefault();
    			ns.saveScript(downURL);
    		}, false);
    
    
    		rawBtn.parentNode.insertBefore(installBtn, rawBtn);
    	},
        github_addListener: function(win){
            var script = '\
                (function(){\
                    var $ = unsafeWindow.jQuery;\
                    if(!$) return;\
                    $(document).on("pjax:success", function(){\
                        github_addButton(document);\
                    });\
                })();\
            ';
            let sandbox = new Cu.Sandbox(win, {sandboxPrototype: win});
            sandbox.unsafeWindow = win.wrappedJSObject;
            sandbox.document     = win.document;
            sandbox.window       = win;
            sandbox.github_addButton = ns.github_addButton;
            Cu.evalInSandbox(script, sandbox);
        },
    	saveCurrentScript: function(event){
    		ns.saveScript();
    	},
    	saveScript: function(url) {
            var win = ns.getFocusedWindow();
    
    
    		var doc, name, fileName, fileExt, charset;
    		if(!url){
    			url = win.location.href;
    			doc = win.document;
    			name = doc.body.textContent.match(/\/\/\s*@name\s+(.*)/i);
    			charset = doc.body.textContent.match(/\/\/\s*@charset\s+(.*)/i);
    		}else{
                if(url.match(/^https?:\/\/github\.com\/\w+\/\w+\/blob\//)){
                    url = url.replace("/blob/", "/raw/");
                }
            }
    
    
    		name = name && name[1] ? name[1] : decodeURIComponent(url.split("/").pop());
            fileName = name.replace(/\.uc\.(js|xul)$|$/i, ".uc.$1").replace(/\s/g, '_');
            if (fileName.match(/\.uc\.$/i)) {  // 对名字进行修正
                var m = url.match(/\.(js|xul)$/);
                if (m)
                    fileName += m[1];
            }
    		fileExt = name.match(/\.uc\.(js|xul)$/i);
            fileExt = fileExt && fileExt[1] ? fileExt[1] : "js";
            charset = charset && charset[1] ? charset[1] : "UTF-8";
    
    
    		// https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Tutorial/Open_and_Save_Dialogs
    		var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
    		fp.init(window, "", Ci.nsIFilePicker.modeSave);
    		fp.appendFilter("*." + fileExt, "*.uc.js;*.uc.xul");
    		fp.appendFilters(Ci.nsIFilePicker.filterAll);
    		fp.displayDirectory = ns.SCRIPTS_FOLDER; // nsILocalFile
    		fp.defaultExtension = fileExt;
    		fp.defaultString = fileName;
    		var callbackObj = {
    			done: function(res) {
    				if (res != fp.returnOK && res != fp.returnReplace) return;
    
    
                    var persist = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].createInstance(Ci.nsIWebBrowserPersist);
                    persist.persistFlags = persist.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION;
    
    
                    var obj_URI;
                    if(doc && fileExt != 'xul'){
                        obj_URI = doc.documentURIObject;
                    }else{
                        obj_URI = Services.io.newURI(url, null, null);
                    }
    
    
                    if(notificationsAfterInstall){
                        persist.progressListener = {
                            onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress) {
                                if(aCurSelfProgress == aMaxSelfProgress){
                                    setTimeout(function(){
                                        ns.showInstallMessage({
                                            fileExt: fileExt,
                                            fileName: fileName,
                                            file: fp.file,
                                            charset: charset
                                        });
                                    }, 100);
                                }
                            },
                            onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) { }
                        };
                    }
    
    
                    persist.saveURI(obj_URI, null, null, null, null, "", fp.file, null);
    			}
    		};
    		fp.open(callbackObj);
    	},
        showInstallMessage: function(info){
            var isRun = (info.fileExt == "js");
    
    
            var mainAction, secondActions;
            if(runWithoutRestart && isRun){
                mainAction = {
                    label: "Sofort ausführen (ohne Neustart).",
                    accessKey: "R",
                    callback: function(){
                        ns.runScript(info.file, info.charset);
                    }
                };
                secondActions = [{
                    label: "Jetzt neu starten",
                    accessKey: "R",
                    callback: ns.restartApp
                }];
            }else{
                mainAction = {
                    label: "Jetzt neu starten",
                    accessKey: "R",
                    callback: ns.restartApp
                };
                secondActions = null;
            }
    
    
            var showedMsg = ns.popupNotification({
                id: "userchromejs-install-popup-notification",
                message: "'" + info.fileName + "' Die Installation ist abgeschlossen.",
                mainAction: mainAction,
                secondActions: secondActions,
                options: {
                    removeOnDismissal: true,
                    persistWhileVisible: true
                }
            });
        },
        popupNotification: function(details){
            var win = ns.getMostRecentWindow();
            if (win && win.PopupNotifications) {
                win.PopupNotifications.show(
                    win.gBrowser.selectedBrowser,
                    details.id,
                    details.message,
                    "",
                    details.mainAction,
                    details.secondActions,
                    details.options);
                return true;
            }
    
    
            return false;
        },
        // 只支持 us.js
        runScript: function(file, charset){
            window.userChrome_js.getScripts();
            if(window.userChromeManager){
                window.userChromeManager.rebuildScripts();
            }
    
    
            var dir = file.parent.leafName;
            if(dir.toLowerCase() == 'chrome' || (dir in window.userChrome_js.arrSubdir)){
    
    
                let context = {};
                Services.scriptloader.loadSubScript( "file:" + file.path, context, charset || "UTF-8");
            }
        },
        flushCache: function (file) {
            if (file)
                 Services.obs.notifyObservers(file, "flush-cache-entry", "");
            else
                 Services.obs.notifyObservers(null, "startupcache-invalidate", "");
        },
    	getFocusedWindow: function() {
    		var win = document.commandDispatcher.focusedWindow;
    		return (!win || win == window) ? content : win;
    	},
    	getMostRecentWindow: function(){
    		return Services.wm.getMostRecentWindow("navigator:browser")
    	},
    	getBrowserForContentWindow: function(aContentWindow) {
    	  return aContentWindow
    	      .QueryInterface(Ci.nsIInterfaceRequestor)
    	      .getInterface(Ci.nsIWebNavigation)
    	      .QueryInterface(Ci.nsIDocShellTreeItem)
    	      .rootTreeItem
    	      .QueryInterface(Ci.nsIInterfaceRequestor)
    	      .getInterface(Ci.nsIDOMWindow)
    	      .QueryInterface(Ci.nsIDOMChromeWindow);
    	},
        restartApp: function() {
            const appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"].getService(Components.interfaces.nsIAppStartup);
    
    
            // Notify all windows that an application quit has been requested.
            var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
            var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"].createInstance(Components.interfaces.nsISupportsPRBool);
            os.notifyObservers(cancelQuit, "quit-application-requested", null);
    
    
            // Something aborted the quit process.
            if (cancelQuit.data) return;
    
    
            // Notify all windows that an application quit has been granted.
            os.notifyObservers(null, "quit-application-granted", null);
    
    
            // Enumerate all windows and call shutdown handlers
            var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
            var windows = wm.getEnumerator(null);
            var win;
            while (windows.hasMoreElements()) {
                win = windows.getNext();
                if (("tryToClose" in win) && !win.tryToClose()) return;
            }
            let XRE = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime);
            if (typeof XRE.invalidateCachesOnRestart == "function") XRE.invalidateCachesOnRestart();
            appStartup.quit(appStartup.eRestart | appStartup.eAttemptQuit);
        }
    };
    
    
    
    
    function $(id) document.getElementById(id);
    function $C(name, attr) {
    	var el = document.createElement(name);
    	if (attr) Object.keys(attr).forEach(function(n) el.setAttribute(n, attr[n]));
    	return el;
    }
    
    
    function log(arg) Application.console.log("[SaveUserChromeJS]" + arg);
    
    
    function checkDoc(doc) {
    	if (!(doc instanceof HTMLDocument)) return false;
    	if (!window.mimeTypeIsTextBased(doc.contentType)) return false;
    	if (!doc.body || !doc.body.hasChildNodes()) return false;
    	if (doc.body instanceof HTMLFrameSetElement) return false;
    	return true;
    }
    
    
    
    
    })();
    
    
    
    
    window.saveUserChromeJS.init();
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Zusammenstellung)

    • bege
    • 7. März 2015 um 13:39

    Hallo,
    das Skript Save UserChromeJS funktionierte lange gut. Jetzt speichert es bei mir das angezeigte Skript nicht mehr. Es wird die Hinweiszeile am oberen Seitenrand angezeigt, beim klicken auf den Button öffnet sich auch das Windows-Fenster zum Speichern der Datei, aber das Skript wird nicht gespeichert - nix und nirgendwo.

    (Fx 36.0.1)

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

    • bege
    • 7. März 2015 um 13:32
    Zitat von Endor

    Da ist nicht die neueste Version.
    Aktuelle wäre Version 0.0.9

    Hier das Script mit integrierter Änderung von aborix:
    ...

    Diese Version hat auch einen frei plazierbaren Button.

    Mfg.
    Endor

    Hallo,
    diese Version aus #2680, jetzt auch auf Github, zeigt bei mir überhaupt keinen Button, weder fest noch verschiebbar. Wie ist das bei euch?
    Die von mir gepostete Version aus #2679 funktioniert problemlos.
    Weiß jemand, woran das liegt?

    (Fx 36.0.1)

Unterstütze uns!

Jährlich (2025)

104,5 %

104,5% (679,10 von 650 EUR)

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