Die von dir genannten Einstellungen werden beide in der 'prefs.js' abgespeichert.
Es ist allerdings auch möglich, dass es eine user.js gibt, die Werte der prefs.js überschreibt.
Die von dir genannten Einstellungen werden beide in der 'prefs.js' abgespeichert.
Es ist allerdings auch möglich, dass es eine user.js gibt, die Werte der prefs.js überschreibt.
Ich brauche den sowieso nicht.
Wie gesagt, es ist ein neuer Add-on-Typ. Es wird ihn also in Zukunft geben. Man kann den Eintrag natürlich per CSS ausblenden. Vielleicht erscheint er auch nur, wenn eine Erweiterung diesen Typs vorhanden ist, wie es bei den Sprachpaketen der Fall ist. Allerdings ist er im Moment da, obwohl es noch keine Erweiterung dafür gibt.
Welche Erweiterung? Keine weiteren Infos und nur ein Link, das kannst Du besser.
Ich habe inzwischen geschrieben, worum es sich handelt und sogar ein Zitat gebracht. Mehr weiß ich nicht. Das Thema stammt nicht von mir.
Ah, OK. Dann wird dieser Eintrag bei mir auch in Zukunft fehlen...
Nicht unbedingt. Die Erweiterung ist taufrisch und führt einen neuen Add-on-Typ ein:
ZitatIn the upcoming strings, you'll find a new type of add-on (like extension, theme, dictionary, language pack) called "Site permissions". This is an experimental new type of add-on, that can only enable specific APIs for a domain (e.g. allow mozilla.org to use the WebMIDI API).
If you want to test the panel, you can install this add-on on a new profile. You need to download the XPI locally, and drag it on the Firefox window, but add-on signature needs to be disabled (see the beginning of the instructions for the MAC add-on if you're not familiar with the process).
Zitat ist der Kommentar von Francesco Lodolo auf Pontoon für die Übersetzer.
Nö, habe ich nicht getan, und ist auch nicht installiert.
Dann ist sie vielleicht schon durch. Ich habe den Eintrag auch, aber ich habe auch vor ein paar Tagen das XPI heruntergeladen. Hier auf Sorbisch und Fuchsfannisch: ![]()
Hier zumindest noch nicht vorhanden
Man muss die Erweiterung von hier herunterladen und außerdem xpinstall.signatures.required in about:config auf false setzen, wer es noch nicht getan hat.
Hauptsache nicht ersetzen, das könnte in die Hose gehen. ![]()
Da bin ich lange dran vorbei.
Ich wollte bloß mal auf den Busch klopfen. ![]()
Wieso, er braucht doch nur nach background und nötigenfalls nach color suchen.
Das sagst du so in deinem jugendlichen Leichtsinn. ![]()
Wenn Dir die grundsätzliche Darstellung zusagt, brauchst Du ja nur die Farben ändern.
Da wird er nicht wissen wo.
CSS-Voodoo
Welches Geistwesen (Loa) bist du denn, was magst du für Opfergaben? ![]()
Zeilen 336 - 339: Muss es nicht about:preferences heißen? Und .pane-container scheint eine Klasse zu sein. Wo ist danach die öffnende geschweifte Klammer? Ist das alles zu about:preferences? Dann fehlt noch eine schließende geschweifte Klammer für die @-moz-document-Regel.
Auch ich wünsche euch allen ein frohes und besinnliches Weihnachtsfest.
Habe im TB-Forum einen Beitrag geschrieben.
Die Position ist mit warpmenuto festgelegt und wenn es bloß die einzige Zeile wäre, die man vielleicht in unserem Skript auskommentieren könnte, wäre es einfach. Aber warpmenuto taucht noch an anderen Stellen im Code auf, den man dort anpassen müsste.
Wie sehen die bei dir aus? Ich habe das in TB nie hingekriegt und irgendwann den Hinweis bekommen, dass CustomizableUI.createWidget in TB nicht verfügbar sei.
Ja, das stimmt.
Ich habe gerade festgestellt, dass meine Skriptversionen etwas anderes aussehen, als die von edvoldis Liste. Er hat Versionen, wo die Position des jeweiligen Symbols nach einem bestimmten Element mit der ID buttons:addons festgelegt ist.
Vielleicht können wir das im TB-Forum weiterführen.
Schreib mal im TB-Thread einen Beitrag:
Ja das wird durch das Script in das Menü der Schaltfläche verschoben.
Das halte ich für unpraktisch. Das Menü der Entwicklerwerkzeuge kann ich mir da eher vorstellen.
Wer weiß, warum das Skript nicht richtig funktioniert. Ich habe da allerdings eine Vermutung: An einigen Stellen werden Variablen mit $() aufgerufen, z. B. in den Zeilen 109 und 111. Das kenne ich nur von jQuery. Vielleicht liegt da der Hund begraben. Da müsste aborix helfen. Ich glaube, das muss er sowieso tun, wenn wir hier weiterkommen wollen. Er ist wie immer die letzte Rettung. ![]()
Und bei mir ist das Menü Extras verschwunden.
Aber die Scripts in Thunderbird lassen sich nicht verschieben.
Die sollten sich auch verschieben lassen. Bei mir tun die beiden Skripte das, vorausgesetzt, du hast das Anpassen-Fenster geöffnet.
Ich habe das Skript mal schnell eingedeutscht:
// ==UserScript==
// @name ExtrasConfigMenuPlus.uc.js
// @include main
// @charset UTF-8
// @note extras_config_menu.uc.js Funktionsreduktion + α
// Klicken Sie mit der rechten Maustaste auf die Schaltfläche / @note, um neu zu starten, klicken Sie mit der mittleren Maustaste, um Folgendes zu öffnen: config
// @note Der Code zum Aktivieren/Deaktivieren des Skripts wurde von alice0775s rebuild_userChrome.uc.xul übernommen.
// @version 2.0.6 Es wurde ein Problem behoben, bei dem "Neustart" durch Rechtsklick auf eine Schaltfläche nicht funktionierte
// @version 2.0.5 Fx72beta
// Unterstützt @ Version 2.0.4 Fx65 oder höher
// @version 2.0.3 Unterstützt Fx65 oder höher Die Erweiterung des Skriptdateinamens wurde in versteckt geändert.
// @version 2.0.2 Unterstützt Fx57 oder höher Kontextmenüformat wurde abgeschafft, Schaltflächen können frei angeordnet werden
// Das Problem wurde behoben, dass ein Neustart durch Rechtsklick auf das Symbol in @version 2.0.1 Fx47 oder höher nicht möglich war.
// @version 2.0.0 Die Funktion wurde abgeschafft, um das Scratchpad zu einem Editor zu machen, behoben, dass es nach Fx44 nicht neu gestartet werden konnte
// ==/UserScript==
/*
■ Über die Bearbeiten & Öffnen-Funktion
Verwenden Sie die Funktion 'Bearbeiten', um eine Datei zu bearbeiten
Verwenden Sie die „Öffnen“-Funktion, um eine Datei oder einen Ordner zu öffnen
Verwenden Sie die Funktion 'toggle', um zwischen falschen Werten umzuschalten
Das erste Argument jeder Funktion gibt den Ordner als Basispunkt an
0 = chrome
1 = profile
2 = C:\WINDOWS
3 = C:\Programme oder C:\Programme (x86)
4 = Beim Schreiben des vollständigen Pfads in das zweite Argument * Setzen Sie das Pfadtrennzeichen auf \\\\
'C' = Laufwerk C
'D' = D-Laufwerk
Das zweite Argument gibt den Datei- oder Ordnernamen im Basisordner an, der im ersten Argument angegeben ist.
Vergessen Sie nicht, es in [] einzuschließen und den Datei-(Ordner-)Namen in '' einzuschließen.
■ Beispiel für die Bearbeitung von prefs.js im Profilordner
ECM.edit (1, ['prefs.js'])
■ Beispiel für das Öffnen eines Chrome-Ordners
ECM.open (0)
■ Beispiel zum Starten von Firefox (Parameter des 3. Arguments kann weggelassen werden)
ECM.open (3, ['Mozilla Firefox','firefox.exe'],'-no-remote')
■ Beispiel für das Umschalten zwischen gültig und ungültig von Javascript
ECM.toggle ('javascript.enabled')
*/
(function () {
'use strict';
const Preferences = Cu.import("resource://gre/modules/Preferences.jsm", {}).Preferences;
window.ECM = {
editor: 1,
// 1 = Editor in view_source.editor.path eingestellt
// Wenn Sie den vollständigen Pfad zum Editor schreiben, verwenden Sie diesen Editor * Schließen Sie den Pfad in'' ein und ersetzen Sie \ durch \\
itemLength: null,
init: function () {
try {
CustomizableUI.createWidget({
id: 'ExtrasConfigMenu',
type: 'custom',
onBuild: function(aDocument) {
var toolbaritem = aDocument.createXULElement('toolbarbutton');
var attributes = {
id: 'ExtrasConfigMenu',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
type: 'menu',
label: 'Extras Config Menu',
image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII=',
tooltiptext: 'Extras Config Menu',
oncontextmenu: 'return false'
};
for (var a in attributes) {
toolbaritem.setAttribute(a, attributes[a]);
};
return toolbaritem;
},
onCreated: function(toolbaritem) {
}
});
} catch (e) {};
setTimeout(() => ECM.init2(), 1000);
this.addPrefListener(ECM.readLaterPrefListener);
window.addEventListener('unload', this, false);
},
init2: function (btn) {
var btn = document.getElementById('ExtrasConfigMenu');
if (!btn)
setTimeout(() => ECM.init2(), 1000);
btn.addEventListener('click', (event) => ECM.onClick(event));
var mp = btn.appendChild(this.createME('menupopup', 0, 0, 0, 'ecm-popup'));
mp.setAttribute('onclick', 'event.preventDefault(); event.stopPropagation();');
mp.addEventListener('popupshowing', (event) => ECM.onpopup(event));
/ * ==================== Von hier einstellen ==================== * /
var devMenu = $ ('webDeveloperMenu');
//Werkzeug
mp.appendChild ($ ('tools-menu')) firstChild.className = "menu-text";
// Entwicklungswerkzeuge
mp.appendChild (devMenu);
//Freier Speicher im Browser
mp.appendChild(this.createME('menuitem', 'Purge Memory', () => {
var os = Services.obs;
var gMgr = Cc['@mozilla.org/memory-reporter-manager;1'].getService(Ci.nsIMemoryReporterManager);
var parentWindow = Services.wm.getMostRecentWindow('navigator:browser');
os.notifyObservers(null, 'child-gc-request', null);
Cu.forceGC();
os.notifyObservers(null, 'child-cc-request', null);
parentWindow.windowUtils.cycleCollect();
os.notifyObservers(null, 'child-mmu-request', null);
gMgr.minimizeMemoryUsage(() => '');
}));
mp.appendChild(this.createME('menuitem', 'Schneller Aufgabenkiller', 'ECM.open(4, "D:\\\\Software\\\\empty\\\\empty.vbs")', 'ecm_vbs', 0));
mp.appendChild(document.createXULElement('menuseparator'));
//Neuer Passwort-Manager
mp.appendChild(this.createME('menuitem', 'Passwortmanager', 'openTrustedLinkIn("about:logins", "tab");', 0, 0));
mp.appendChild(document.createXULElement('menuseparator'));
mp.appendChild(this.createME('menuitem', 'Javascript On/Off', 'ECM.toggle("javascript.enabled")', 'ecm_pref', 0));
mp.appendChild(this.createME('menuitem', 'Standortinformationen On/Off', 'ECM.toggle("geo.enabled")', 'ecm_pref', 0));
mp.appendChild(document.createXULElement('menuseparator'));
mp.appendChild(this.createME('menuitem', 'userChrome.css', 'ECM.edit(0, ["userChrome.css"])', 'ecm_edit', 0));
mp.appendChild(this.createME('menuitem', 'userContent.css', 'ECM.edit(0, ["userContent.css"])', 'ecm_edit', 0));
mp.appendChild(document.createXULElement('menuseparator'));
mp.appendChild(this.createME('menuitem', 'prefs.js', 'ECM.edit(1, ["prefs.js"])', 'ecm_js', 0));
mp.appendChild(this.createME('menuitem', 'user.js', 'ECM.edit(1, ["user.js"])', 'ecm_js', 0));
mp.appendChild(this.createME('menuitem', '_keychanger.js', 'ECM.edit(0, ["_keychanger.js"])', 'ecm_edit', 0));
/*
mp.appendChild(this.createME('menuitem', '_uAutoPagerize.js', 'ECM.edit(0, ["_uAutoPagerize.js"])', 'ecm_edit', 0));
*/
mp.appendChild(document.createXULElement('menuseparator'));
mp.appendChild(this.createME('menuitem', 'Chrome', 'ECM.open(0)', 'ecm_folder', 0));
mp.appendChild(this.createME('menuitem', 'Profile', 'ECM.open(1)', 'ecm_folder', 0));
/*
mp.appendChild(this.createME('menuitem', 'SubScript', 'ECM.open(0, ["SubScript"])', 'ecm_folder', 0));
mp.appendChild(this.createME('menuitem', 'CSS', 'ECM.open(0, ["CSS"])', 'ecm_folder', 0));
mp.appendChild(this.createME('menuitem', 'UserScriptLoader', 'ECM.open(0, ["UserScriptLoader"])', 'ecm_folder', 0));
mp.appendChild(this.createME('menuitem', 'Install Folder', 'ECM.open(3, ["Mozilla Firefox"])', 'ecm_folder', 0));
*/
mp.appendChild(document.createXULElement('menuseparator'));
mp.appendChild($('aboutName').cloneNode(false));
/* ==================== END ==================== */
this.itemLength = mp.childNodes.length;
},
handleEvent: function (event) {
if (event.type === 'unload') {
this.removePrefListener(ECM.readLaterPrefListener);
this.itemLength = null;
}
},
onClick: function (event) {
if (event.button === 1) {
gBrowser.selectedTab = gBrowser.addTrustedTab("about:config");
} else if (event.button === 2) {
event.preventDefault();
Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);
}
},
edit: function (key, pathArray) {
var path = this.getPath(key, pathArray);
if (this.editor === 1) {
this.launch(Services.prefs.getCharPref('view_source.editor.path'), path);
} else {
this.launch(this.editor, path);
}
},
open: function (key, pathArray, arg) {
var path = this.getPath(key, pathArray);
this.launch(path, arg);
},
launch: function (path, arg) {
arg = [arg] || [];
var file = this.getFile(path);
if (!file.exists()) {
return;
}
if (!file.isDirectory()) {
var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, arg, arg.length);
} else {
file.reveal();
}
},
getFile: function (path) {
var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
file.initWithPath(path);
return file;
},
getDir: function (key, pathArray) {
var dir;
if (key.indexOf('\\') !== -1) {
dir = this.getFile(key);
} else {
dir = Services.dirsvc.get(key, Ci.nsIFile);
}
if (pathArray != null) {
for (var i = 0, len = pathArray.length; i < len; ++i) {
dir.append(pathArray[i]);
}
}
return dir.path;
},
getPath: function (key, pathArray) {
pathArray = pathArray || [];
var path = '';
switch (key) {
case 0:
path = this.getDir('UChrm', pathArray);
break;
case 1:
path = this.getDir('ProfD', pathArray);
break;
case 2:
path = this.getDir('WinD', pathArray);
break;
case 3:
path = this.getDir('ProgF', pathArray);
break;
case 4:
path = pathArray;
break;
case 'C':
path = this.getDir('C:\\', pathArray);
break;
case 'D':
path = this.getDir('D:\\', pathArray);
break;
}
return path;
},
toggle: function (prefName) {
var pref = this.getPref(prefName);
var prefType = Services.prefs.getPrefType(prefName);
if (prefType === Ci.nsIPrefBranch.PREF_BOOL) {
this.setPref(prefName, !pref);
}
},
createME: function (sTyp, sLabel, sCommand, sClass, sId) {
var ele = document.createXULElement(sTyp);
switch (sTyp) {
case 'menuitem':
ele.setAttribute('label', sLabel);
ele.setAttribute('class', 'menuitem-iconic');
if (typeof sCommand === 'function') {
ele.setAttribute('oncommand', '(' + sCommand.toSource() + ').call(this, event);');
} else {
ele.setAttribute('oncommand', sCommand);
}
if (sClass) ele.classList.add(sClass);
break;
case 'menu':
ele.setAttribute('label', sLabel);
ele.setAttribute('id', sId);
break;
case 'menupopup':
ele.setAttribute('id', sId);
break;
}
return ele;
},
onpopup: function (event) {
var mp = event.target;
if (mp !== event.currentTarget) {
return;
}
for (let i = this.itemLength, len = mp.childNodes.length; i < len; i++) {
mp.removeChild(mp.lastChild);
}
var sep = document.createXULElement('menuseparator');
mp.appendChild(sep);
var scripts = userChrome_js.scripts.concat(userChrome_js.overlays);
for (let j = 0, lenj = userChrome_js.arrSubdir.length; j < lenj; j++) {
var dirName = (userChrome_js.arrSubdir[j] == '') ? 'root' : userChrome_js.arrSubdir[j];
var flg = false;
for (var i = 0, len = scripts.length; i < len; i++) {
var script = scripts[i];
if (script.dir !== dirName) continue;
flg = true;
break;
}
if (!flg) continue;
var menu = mp.appendChild(document.createXULElement('menu'));
menu.setAttribute('label', 'chrome/' + (dirName == 'root' ? '' : dirName));
menu.dirName = dirName;
var mp = menu.appendChild(document.createXULElement('menupopup'));
mp.setAttribute('onpopupshowing', 'event.stopPropagation();');
var flg = false;
for (let i = 0, len = scripts.length; i < len; i++) {
var script = scripts[i];
var type = script.filename.lastIndexOf('uc.js') !== -1;
if (script.dir != dirName) continue;
if (flg && type !== flg) {
var sep = document.createXULElement('menuseparator');
mp.appendChild(sep);
}
flg = type;
var mi = mp.appendChild(document.createXULElement('menuitem'));
mi.setAttribute('label', script.filename.replace(/\.uc\.js$|\.uc\.xul$/g, ''));
mi.setAttribute('oncommand', 'ECM.chgScriptStat(script.filename);');
mi.setAttribute('onclick', 'if (event.button !== 0) { event.preventDefault(); event.stopPropagation(); ECM.clickScriptMenu(event); }');
mi.setAttribute('closemenu', 'none');
mi.setAttribute('type', 'checkbox');
mi.setAttribute('checked', !userChrome_js.scriptDisable[script.filename]);
if (script.description)
mi.setAttribute('tooltiptext', script.description);
mi.script = script;
}
mp = event.target;
}
},
clickScriptMenu: function (event) {
var target = event.target;
var script = target.script;
var fileURL = Services.io.getProtocolHandler('file').QueryInterface(Ci.nsIFileProtocolHandler).getFileFromURLSpec(script.url);
if (event.button === 1) {
this.chgScriptStat(script.filename);
target.setAttribute('checked', !userChrome_js.scriptDisable[script.filename]);
} else if (event.button === 2) {
this.edit(4, fileURL.path);
}
},
chgScriptStat: function (afilename) {
var s = this.getPref('userChrome.disable.script');
if (!userChrome_js.scriptDisable[afilename]) {
s = (s + ',').replace(afilename + ',', '') + afilename + ',';
} else {
s = (s + ',').replace(afilename + ',', '');
}
s = s.replace(/,,/g, ',').replace(/^,/, '');
this.setPref('userChrome.disable.script', s);
userChrome_js.scriptDisable = this.restoreState(s.split(','));
},
restoreState: function (arr) {
var disable = [];
for (var i = 0, len = arr.length; i < len; i++) {
disable[arr[i]] = true;
}
return disable;
},
getPref: function (prefName) {
return Preferences.get(prefName);
},
setPref: function (prefName, value) {
Preferences.set(prefName, value);
},
addPrefListener: function (aObserver) {
Services.prefs.addObserver(aObserver.domain, aObserver, false);
},
removePrefListener: function (aObserver) {
Services.prefs.removeObserver(aObserver.domain, aObserver);
},
readLaterPrefListener: {
domain: 'userChrome.disable',
observe: function (aSubject, aTopic, aPrefstring) {
if (aTopic === 'nsPref:changed') {
setTimeout(() => {
var s = ECM.getPref('userChrome.disable.script');
userChrome_js.scriptDisable = ECM.restoreState(s.split(','));
}, 0);
}
}
}
};
window.ECM.init();
function $(id) {
var ele = {};
if (ele[id] == null) {
ele[id] = document.getElementById(id);
}
return ele[id];
}
}());
Alles anzeigen
Gerade mal getestet: Ändert leider nichts an dem Verhalten. Einige Tabs sind immer noch leer und es wird auch kein Favicon angezeigt, nur die Seitenbezeichnung im Tab in der Tableiste ist zu sehen, also genau wie vorher.
Immer auch bei jeder Änderung dran gedacht, beim Neustart von Firefox den Skript-Cache zu leeren?