Bitte poste doch einmal die "neue" Fehlerausgabe.
Aber natürlich, erstes in der Konsole, und zweites in der Info zur utilities.js.
Bitte poste doch einmal die "neue" Fehlerausgabe.
Aber natürlich, erstes in der Konsole, und zweites in der Info zur utilities.js.
Heute habe ich ein neues Profil angelegt (v145.0), und in diesem wird in der Konsole der folgende Fehler angezeigt.
In dem älteren Profil ist es nicht so, wie kann das sein. Was muss im Script geändert werden? Danke für jede Hilfe.
// Button_ClearCache.uc.js
// Linksklick löscht den Cache
// Mittelklick öffnet die Bookmarks-Sidebar
// Rechtsklick öffnet den Chronik-Dialog
(function() {
if (!window.gBrowser)
return;
try {
CustomizableUI.createWidget({
id: 'buttonClearCache',
type: 'custom',
defaultArea: CustomizableUI.AREAS,
onBuild: function(aDocument) {
var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var props = {
id: 'buttonClearCache',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: true,
// Name im AnpassungFenster
label: 'Cache löschen',
// Name bei MausHover wenn in Symbolleiste
tooltiptext: 'Links Cache löschen / Mittelklick öffnet die Bookmarks-Sidebar / Rechts Chronik-Dialog öffnen',
style: 'list-style-image: url("file:///C:/FoxIcons2/Bild43.png")',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e) { };
document.getElementById('buttonClearCache').addEventListener('click', event => {
if (event.button == 0) {
Services.cache2.clear();
}
if (event.button == 1) {
SidebarController.toggle('viewBookmarksSidebar').click();
}
if (event.button == 2) {
event.target.ownerDocument.getElementById('sanitizeItem').click();
}
});
})();
Alles anzeigen
Edit: Den Teil im Script habe ich jetzt so geändert:
//document.getElementById('buttonClearCache').addEventListener('click', event => {
function onClick(event) {
if (event.button == 0) {
Services.cache2.clear();
}
if (event.button == 1) {
SidebarController.toggle('viewBookmarksSidebar').click();
}
if (event.button == 2) {
event.target.ownerDocument.getElementById('sanitizeItem').click();
}
});
})();
Alles anzeigen
Dadurch sind die Fehler 37 und 49 weg, aber 114 in der utilities.js wird immer noch angezeigt.
Mir ist das auch hier schon aufgefallen; meine Vermutung war aber dass du einfach den Screenshot rechts zu stark angeschnitten hattest.
Nein, hier hatte ich das Script getestet, nur den Hintergrund geändert, sonst nichts. So ist es jetzt mit ein paar Änderungen, Breite kann ja beliebig angepasst werden.
Für Buttons, die in der Breite von den Standardbuttons abweichen kann in der '■UserConfiguration TOOLBAR■' --vt-toolbar-min-width: 32px; /*Leistenbreite bei mouseout*/ angepasst werden. Dann würde auch der rechte Rand des Buttons sichtbar sein.
Die Breite hatte ich schon geändert, aber das sind nicht die einzelnen Button. Das sieht so aus:
ansonsten müsste sie jetzt automatisch gesetzt und an Themes angepasst sein.
, passt!
Niemand weiß welches Skript der User überhaupt nutzt.
Da habe ich jetzt nicht drauf geachtet, mich nur auf das Script aus #106 konzentriert.![]()
Wenn du die Border sichtbar haben möchtest, kannst du die Farbe in Zeile 53 fest eingeben
Danke für deine Hinweise, mache ich dann noch. Auf die Schnelle hatte ich das Script erst einmal nur eingefügt, um zu prüfen ob es alles funktioniert.
aber nur so groß das nur ein Icon drauf passt.
Ohne eine Änderung am Script, es wird alles angezeigt.![]()
Da ich diesen Eintrag nicht benötige, nutze ich weiter meine o.a. funktionierende Version.
Mache ich ja auch, möchte ich auch nicht mehr hergeben. Dieses Script von #1 ist für mich eine Alternative, denn bisher haben wir immer Glück gehabt, dass Helfer in der Not unser Script wieder lauffähig gemacht haben. Wir wollen hoffen, dass es auch in Zukunft so bleibt.
Ich meine das mal gelesen zu haben, bin mir aber nicht sicher.
Nur notepad++ habe ich dort, alle anderen portablen Programme liegen auf einem anderen Laufwerk. Muss ich dann auch mal verschieben, ist ja kein Problem.
Heißt es nicht immer: Portable Programme nicht unter C:// einzutragen!?
?????![]()
Aber eben nicht bei einer (normalen) Installation.
Genau, das muss dann berücksichtigt werden, wie sich jetzt zeigt. Danke, Andreas!![]()
Wo hast du denn Notepad++ installiert?
Auf Laufwerk C: als portable Version.
Ein Klick auf D: Ordner Software leeren, und der Inhalt des Ordners Software auf D: wird gelöscht, usw.
Nur noch ein Hinweis hierzu, falls es nachgemacht werden soll. Im Ordner Software auf Laufwerk D muss sich die PowerShell-Datei löschen.ps1 befinden. Der Eintrag in diesem Fall sieht dann so aus Remove-Item -Path "D:\Software\*" -Exclude "löschen.ps1" -Recurse.
Das bedeutet, der Inhalt des Ordners Software wird gelöscht, ausgenommen davon ist die Datei löschen.ps1, denn diese muss ja erhalten bleiben.
Das wäre so auf andere Vorgänge übertragbar, Backup usw.
2002Andreas , milupo , BrokenHeart
Danke für euer Mitwirken, was letztendlich zum Erfolg führte.![]()
Du musst also nur in Zeile 76 deinen Pfad eintragen:
Genau so funktioniert es jetzt, und zwar muss die Zeile so aussehen (ohne die 1) editor: 'C:\\notepad++\\notepad++.exe',
Rein Interesse halber: Was kann dein Script, was meins nicht kann?
Das ist erst einmal zum Test gedacht, weil dort z.B. einige Schalter bei sind, die mein Interesse geweckt haben.
So z.B.mp.appendChild(this.createME('menuitem', 'D: Ordner Software leeren', 'ECM.open(4, "D:\\\\Software\\\\löschen.ps1")', '', 0));
Ein Klick auf D: Ordner Software leeren, und der Inhalt des Ordners Software auf D: wird gelöscht, usw.
Wenn ich das so ändere, also 230 aktivieren..231 deaktivieren.
Hier leider nicht, wieso auch immer.
Nun hat BrokenHeart mir wohl gezeigt, warum es nicht funktioniert.
Du hast den Pfad zu deinem notepad++ Editor in den Parameter eingetragen, der für den Namen des Eintrags in deinen Voreinstellungen vorgesehen ist. Die Bibliotheksfunktion sucht also in den Prefs nach einem Eintrag C:\\notepad++\\notepad++.exe und findet natürlich nichts. Du musst also den Eintrag 'view_source.editor.path' über about:config oder in der user.js mit dem gewünschten Pfad überschreiben oder du erzeugst einfach einen neuen Eintrag mit dem Pfad auf den notepad++ Editor.
Danke für den Hinweis, da werde ich mich morgen mit befassen. ![]()
Das originale Script ist hier zu finden:
Ich habe eine Übersetzung versucht, damit wenigstens ein kleiner Überblick vorhanden ist. Es wird in dem Script auch erklärt was beim Einsatz eines eigenen Editors zu machen ist. Das habe ich in Zeile 231 eingetragen, aber beim Aufruf einer Datei (z.B. user,js) passiert nichts. Was habe ich nicht beachtet, bitte helfen?
// ==UserScript==
// @name ExtrasConfigMenuPlus.uc.js
// @include main
// @charset UTF-8
// @note extras_config_menu.uc.js / Funktionsreduktion von +α
// @note Klicken Sie mit der rechten Maustaste auf die Schaltfläche, um neu zu starten, und klicken Sie mit der
// mittleren Maustaste, um about:config zu öffnen
// @note Der Code zum Aktivieren/Deaktivieren des Skripts wurde von rebuild_userChrome.uc.js von alice0775 ausgeliehen.
// @version 2.0.13 Fx143+
// @version 2.0.12 Fx142+
// @version 2.0.11 Fx139+ / Weitere Korrekturen Erläuterung hinzugefügt
// @version 2.0.10 Fx136+
// @version 2.0.9 toggle / Unterstützt das Umschalten ganzzahliger Werte zwischen 0 und 1 mit Funktionen
// @version 2.0.8 Fx115+
// @version 2.0.7 Entwicklungsmenü
// @version 2.0.6 Es wurde ein Problem behoben, bei dem „Neustart“ per Rechtsklick auf die Schaltfläche nicht funktionierte.
// @version 2.0.5 Fx72beta
// ==/UserScript==
/*
■ createME Über Funktionen
createME('Menütyp', 'Anzeigeetikett', 'Ausführbare Befehle und Funktionen', 'Name zur Angabe des Symbols', 'ID'));
Der Name zur Angabe des Symbols kann beliebig sein, muss aber innerhalb der setIcon-Funktion übereinstimmen.
Sie können die Entsprechung erkennen, indem Sie sich das Standardbeispielmenü und die Funktion setIcon ansehen.
Wenn nicht angegeben, wird das Standard-Favicon angezeigt.
■ edit & open Über Funktionen
Use the 'edit' function to edit files
Use the 'open' function to open a file or folder
Verwenden Sie die Funktion „Umschalten“, um zwischen wahren und falschen Werten zu wechseln (das Umschalten zwischen ganzzahligen Werten von 0 und 1 wird ebenfalls unterstützt).
Das erste Argument jeder Funktion gibt den Basisordner an.
0 = chrome
1 = profile
2 = C:\WINDOWS
3 = C:\Program Files oder C:\Program Files (x86)
4 = Beim Schreiben des vollständigen Pfads im zweiten Argument *Setzen Sie das Pfadtrennzeichen auf \\\\
'C' = Laufwerk C
'D' = Laufwerk D
Das zweite Argument gibt den Datei- oder Ordnernamen im im ersten Argument angegebenen Basisordner an.
Vergessen Sie nicht, es in [] und den Dateinamen (Ordner) in '' einzuschließen.
■ Beispiel für die Bearbeitung von prefs.js im Profilordner
ECM.edit(1, ['prefs.js'])
■ Beispiel für das Öffnen des Chrome-Ordners
ECM.open(0)
■ Beispiel für den Start von Firefox (der dritte Argumentparameter kann weggelassen werden)
ECM.open(3, ['Mozilla Firefox', 'firefox.exe'], '-no-remote')
■ Beispiel für die Aktivierung/Deaktivierung von Javascript
ECM.toggle('javascript.enabled')
■ Informationen zum Ein-/Ausschalten und Bearbeiten des Userchrome-Skripts
Klicken Sie mit der mittleren Maustaste auf ein Skript, um es zu aktivieren oder zu deaktivieren
Bearbeiten Sie das Skript, indem Sie mit der rechten Maustaste klicken
*/
(function () {
'use strict'
const { Preferences } = ChromeUtils.importESModule('resource://gre/modules/Preferences.sys.mjs');
window.ECM = {
editor: 1,
// 1 = Editor in view_source.editor.path festgelegt
// Wenn Sie den vollständigen Pfad zu einem Editor angeben, wird dieser Editor verwendet. *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) {
const toolbaritem = aDocument.createXULElement('toolbarbutton');
const 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) {};
wait();
ECM.init2();
this.addPrefListener(ECM.readLaterPrefListener);
window.addEventListener('unload', this, false);
let sb = window.userChrome_js?.sb;
if (!sb) {
sb = Cu.Sandbox(window, {
sandboxPrototype: window,
sameZoneAs: window,
});
Cu.evalInSandbox(`
Function.prototype.toSource = window.Function.prototype.toSource;
Object.defineProperty(Function.prototype, 'toSource', {enumerable : false})
Object.prototype.toSource = window.Object.prototype.toSource;
Object.defineProperty(Object.prototype, 'toSource', {enumerable : false})
Array.prototype.toSource = window.Array.prototype.toSource;
Object.defineProperty(Array.prototype, 'toSource', {enumerable : false})
`, sb);
window.addEventListener('unload', () => {
setTimeout(() => {
Cu.nukeSandbox(sb);
}, 0);
}, { once: true });
}
this.sb = sb;
},
init2: function (btn) {
var btn = $('ExtrasConfigMenu');
if (!btn) {
wait();
ECM.init2();
}
btn.addEventListener('click', (event) => ECM.onClick(event));
const mp = btn.appendChild(this.createME('menupopup', 0, 0, 0, 'ecm-popup'));
mp.addEventListener('click', (event) => { event.preventDefault(); event.stopPropagation(); });
mp.addEventListener('popupshowing', (event) => ECM.onpopup(event));
/* ==================== Von hier aus eingestellt ==================== */
//Menü „Werkzeuge“.
mp.appendChild($('tools-menu'));
//Browser-Tools
mp.appendChild($('browserToolsMenu'));
//Freier Browserspeicher
mp.appendChild(this.createME('menuitem', 'Speicher löschen', () => {
const os = Services.obs;
const gMgr = Cc['@mozilla.org/memory-reporter-manager;1'].getService(Ci.nsIMemoryReporterManager);
const 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', 'D: Ordner Software leeren', 'ECM.open(4, "D:\\\\Software\\\\löschen.ps1")', '', 0));
mp.appendChild(document.createXULElement('menuseparator'));
//Passwort-Manager
mp.appendChild(this.createME('menuitem', 'Passwort-Manager', 'openTrustedLinkIn("about:logins", "tab");', 'password', 0));
mp.appendChild(document.createXULElement('menuseparator'));
mp.appendChild(this.createME('menuitem', 'Javascript On/Off', 'ECM.toggle("javascript.enabled")', 'pref', 0));
mp.appendChild(this.createME('menuitem', 'Standortintelligenz On/Off', 'ECM.toggle("geo.enabled")', 'pref', 0));
mp.appendChild(this.createME('menuitem', 'Geben Sie den auf der Webseite angegebenen Schriftarten Vorrang', 'ECM.toggle("browser.display.use_document_fonts")', 'pref', 0));
mp.appendChild(document.createXULElement('menuseparator'));
mp.appendChild(this.createME('menuitem', 'userChrome.css', 'ECM.edit(0, ["userChrome.css"])', 'edit', 0));
mp.appendChild(this.createME('menuitem', 'userContent.css', 'ECM.edit(0, ["userContent.css"])', 'edit', 0));
mp.appendChild(document.createXULElement('menuseparator'));
mp.appendChild(this.createME('menuitem', 'prefs.js', 'ECM.edit(1, ["prefs.js"])', 'js', 0));
mp.appendChild(this.createME('menuitem', 'user.js', 'ECM.edit(1, ["user.js"])', 'js', 0));
mp.appendChild(this.createME('menuitem', '_keychanger.js', 'ECM.edit(0, ["_keychanger.js"])', 'edit', 0));
mp.appendChild(document.createXULElement('menuseparator'));
mp.appendChild(this.createME('menuitem', 'Ordner chrome', 'ECM.open(0)', 'folder', 0));
mp.appendChild(this.createME('menuitem', 'Profilordner', 'ECM.open(1)', 'folder', 0));
mp.appendChild(this.createME('menuitem', 'Ordner Scripte', 'ECM.open(0, ["Scripte"])', 'folder', 0));
mp.appendChild(this.createME('menuitem', 'Ordner CSS', 'ECM.open(0, ["CSS"])', 'folder', 0));
//mp.appendChild(this.createME('menuitem', 'UserScriptLoader', 'ECM.open(0, ["UserScriptLoader"])', 'folder', 0));
mp.appendChild(this.createME('menuitem', 'Installationsordner', 'ECM.open(3, ["Mozilla Firefox"])', 'folder', 0));
mp.appendChild(document.createXULElement('menuseparator'));
mp.appendChild(this.createME('menuitem', 'Firefox Update-Bestätigung', 'openAboutDialog();', 'info', 0));
/* ==================== Bisherige Einstellungen ==================== */
this.itemLength = mp.childNodes.length;
},
handleEvent: function (event) {
if (event.type === 'unload') {
window.removeEventListener('unload', this, false);
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);
} else {
return;
}
},
edit: function (key, pathArray) {
const path = this.getPath(key, pathArray);
if (this.editor === 1) {
//this.launch(Services.prefs.getCharPref('view_source.editor.path'), path);
this.launch(Services.prefs.getCharPref('C:\\notepad++\\notepad++.exe'), path);
} else {
this.launch(this.editor, path);
}
},
open: function (key, pathArray, arg) {
const path = this.getPath(key, pathArray);
this.launch(path, arg);
},
launch: function (path, arg) {
arg = [arg] || [];
const file = new FileUtils.File(path);
if (!file.exists()) {
return;
}
if (!file.isDirectory()) {
const process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, arg, arg.length);
} else {
file.reveal();
}
},
getDir: function (key, pathArray) {
let dir;
if (key.indexOf('\\') !== -1) {
dir = new FileUtils.File(key);
} else {
dir = Services.dirsvc.get(key, Ci.nsIFile);
}
if (pathArray != null) {
for (let i = 0, len = pathArray.length; i < len; ++i) {
dir.append(pathArray[i]);
}
}
return dir.path;
},
getPath: function (key, pathArray) {
pathArray = pathArray || [];
let 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 = Preferences.get(prefName);
var prefType = Services.prefs.getPrefType(prefName);
if (prefType === Ci.nsIPrefBranch.PREF_BOOL) {
Preferences.set(prefName, !pref);
} else if (prefType === Ci.nsIPrefBranch.PREF_INT) {
Preferences.set(prefName, (pref == 1) ? 0 : 1);
}
},
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);
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 = userChrome_js.scripts.length; i < len; i++) {
var script = userChrome_js.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.addEventListener('click', event => {event.stopPropagation();});
var flg = false;
for (let i = 0, len = userChrome_js.scripts.length; i < len; i++) {
var script = userChrome_js.scripts[i];
if (script.dir != dirName) continue;
flg = true;
var mi = mp.appendChild(document.createXULElement('menuitem'));
mi.setAttribute('label', script.filename.replace(/\.uc\.js$|\.uc\.xul$/g, ''));
mi.setAttribute('closemenu', 'none');
mi.setAttribute('type', 'checkbox');
mi.setAttribute('autocheck','false');
mi.setAttribute('checked', !userChrome_js.scriptDisable[script.filename]);
if (script.description) {
mi.setAttribute('tooltiptext', script.description);
}
mi.script = script;
mi.addEventListener('command', () => ECM.chgScriptStat(this.script.filename));
mi.addEventListener('click', (event) => ECM.clickScriptMenu(event));
mi.addEventListener('mouseup', (event) => {if (event.button == 1) event.preventDefault()});
}
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) {
event.stopPropagation();
event.preventDefault();
ECM.chgScriptStat(script.filename);
target.setAttribute('checked', !userChrome_js.scriptDisable[script.filename]);
} else if (event.button === 2) {
event.stopPropagation();
event.preventDefault();
this.edit(4, fileURL.path);
} else { return; }
},
chgScriptStat: function (afilename) {
var s = ECM.getPref('userChrome.disable.script', 'str', '');
if (!userChrome_js.scriptDisable[afilename]) {
s = (s + ',').replace(afilename + ',', '') + afilename + ',';
} else {
s = (s + ',').replace(afilename + ',', '');
}
s = s.replace(/,,/g, ',').replace(/^,/, '');
ECM.setPref('userChrome.disable.script', 'str', 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(aPrefString, aPrefType, aDefault){
var xpPref = Services.prefs;
try {
switch (aPrefType){
case 'complex':
return xpPref.getComplexValue(aPrefString, Ci.nsIFile); break;
case 'str':
return unescape(xpPref.getCharPref(aPrefString).toString()); break;
case 'int':
return xpPref.getIntPref(aPrefString); break;
case 'bool':
default:
return xpPref.getBoolPref(aPrefString); break;
}
} catch(e) {}
return aDefault;
},
setPref: function(aPrefString, aPrefType, aValue){
var xpPref = Services.prefs;
try {
switch (aPrefType){
case 'complex':
return xpPref.setComplexValue(aPrefString, Components.interfaces.nsIFile, aValue); break;
case 'str':
return xpPref.setCharPref(aPrefString, escape(aValue)); break;
case 'int':
aValue = parseInt(aValue);
return xpPref.setIntPref(aPrefString, aValue); break;
case 'bool':
default:
return xpPref.setBoolPref(aPrefString, aValue); break;
}
} catch(e) {}
return null;
},
addPrefListener: function (aObserver) {
try {
let pbi = Services.prefs;
pbi.addObserver(aObserver.domain, aObserver, false);
} catch(e) {}
},
removePrefListener: function (aObserver) {
try {
let pbi = Services.prefs;
pbi.removeObserver(aObserver.domain, aObserver);
} catch(e) {}
},
readLaterPrefListener: {
domain: 'userChrome.disable',
observe: function (aSubject, aTopic, aPrefstring) {
if (aTopic === 'nsPref:changed') {
setTimeout(() => {
let s = ECM.getPref('userChrome.disable.script', 'str', s);
userChrome_js.scriptDisable = ECM.restoreState(s.split(','));
}, 0);
}
}
},
setIcon: function(type) {
let icon = '';
switch (type) {
case 'edit':
icon = 'chrome://global/skin/icons/edit.svg';
break;
case 'folder':
icon = 'chrome://global/skin/icons/folder.svg';
break;
case 'password':
icon = 'chrome://browser/skin/login.svg';
break;t
case 'pref':
icon = 'chrome://global/skin/icons/settings.svg';
break;
case 'info':
icon = 'chrome://global/skin/icons/info.svg';
break;
case 'js':
icon = 'moz-icon://.js?size=16';
break;
case 'bat':
icon = 'moz-icon://.bat?size=16';
break;
case 'vbs':
icon = 'moz-icon://.vbs?size=16';
break;
default:
icon = 'chrome://global/skin/icons/defaultFavicon.svg';
break;
}
return icon;
},
createME: function(sTyp, sLabel, sCommand, sImage, sId) {
const ele = document.createXULElement(sTyp);
switch (sTyp) {
case 'menuitem':
ele.setAttribute('label', sLabel);
ele.setAttribute('class', 'menuitem-iconic');
ele.setAttribute('image', encodeURI(this.setIcon(sImage)));
const func = typeof sCommand === 'string' ? (() => {
if (sCommand.trim().startsWith('function')) {
return '(' + sCommand + ').call(this, event)';
}
return sCommand;
})() : '(' + sCommand.toString() + ').call(this, event)';
ele.addEventListener('command', (event) => { Cu.evalInSandbox(func, ECM.sb); }, false);
// 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;
}
};
window.ECM.init();
function $(id) {
let ele = {};
if (ele[id] == null) {
ele[id] = document.getElementById(id);
}
return ele[id];
}
function wait() {
let start = new Date();
new Date() - start < 1000;
}
}());
Alles anzeigen
Version 10/ Fix:
![]()
![]()
@Horstmann
Nur als Hinweis, stelle ich in Zeile 72 auf true, so bleibt beim Ausblenden die Leiste wieder sichtbar (Thema hatten wir schon).
Das Problem ist, der Hintergrund wird bei diesem Theme gekachelt,
Stimmt, das habe ich mal mit unterschiedlichen Themes getestet, sind immer einige dabei. Den Code werde ich mal probieren, obwohl es für mich uninteressant ist, weil die Themes, die ich nutze (sind nur ganz wenige), keine Probleme bereiten.
Ich bedanke mich trotzdem für deinen Einsatz in dieser Sache. ![]()