in dem zur zeit benutzen profil ist das neue drin.
Andere Skripte funktionieren?
in dem zur zeit benutzen profil ist das neue drin.
Andere Skripte funktionieren?
also ja
ok.![]()
Ich bin genervt. Was mach ich falsch, dass es nicht funktioniert? ![]()
Also: UTF-8
ja -> ![]()
Poste doch bitte "Dein" Skript.
Dann können wir schauen, ob versehentlich am Code was geändert wurde.
Du kannst natürlich auch die Konsole öffnen und mal nach schauen, ob ein Fehler ausgeworfen wird,
wenn Du auf den Button klickst.
Wenn ja, diesen posten.
Bitte poste hier mal dein altes Script.
Ich möchte das vergleichen mit dem neuen.
Danke.
Mfg.
Endor
scripte habe ich ja im unterordner "Scripte"
Ändere im Script die entsprechende Bezeichnung:
Zeile 55
jsSubfolder: 'scripts', muss jsSubfolder: 'Scripte', heißen.
Hier hatten wir schon einmal von deinem Script gehört, da funktionierte ja auch schon einiges nicht. Ich habe dieses (also was du damals schon genutzt hast) jetzt wieder lauffähig gemacht. Probiere es aus, ansonsten weiß ich auch nicht mehr weiter.
// ==UserScript==
// @name extras_config_menu.uc.js
// @compatibility Firefox 159+
// @version 2.0.20261104
// @description Extra Config Menü für Firefox 159+
// ==/UserScript==
(function() {
"use strict";
var uProfMenu = {
// ==================================================
// KONFIGURATION
// ==================================================
// Hier kann der Pfad zum einem Texteditor eintragen werden
// (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen:
// TextOpenExe: 'C:\\Program Files (x86)\\Notepad++\\notepad++.exe',
TextOpenExe: 'D:\\PortableProgramme\\Notepad++Portable_x64\\notepad++.exe',
// Falls gewuenscht, kann hier ein Dateimanager eintragen (komplett leer lassen fuer Dateimanager des Systems) Beispiele:
// vFileManager: 'E:\\Total Commander\\Totalcmd.exe',
// vFileManager: 'C:\\Program Files (x86)\\FreeCommander\\FreeCommander.exe'
vFileManager: '',
// Falls Javacripte sich nicht nur im chrome-Verzeichnis, sondern auch in einem Unterverzeichnis befinden,
// hier den Ordnernamen des Unterverzeichnises eintragen.
// Sonst: '' , es werden dann nur die Skripte aus dem chrome-Verzeichnis angezeigt
jsSubfolder: 'Scripte',
// In der folgenden Zeile (19) 'menu' eintragen, damit es unter "Extras" als Menue erscheint, sonst die id des gewuenschten
// Elements *nach* dem der Button erscheinen soll (z.B. 'urlbar', 'searchbar', 'undoclosetab-button','abp-toolbarbutton')
// Bitte nicht so etwas wie die Menue- oder Navigationsleiste (sondern einen Menuepunkt oder einen Button mit id auf diesen Leisten) eintragen:
warpmenuto: 'urlbar-container',
// Unter Linux sollte/kann versucht werden, die userChromeJS-Skripte zu sortieren, unter Windows ist das evtl. nicht noetig (die Sortierung wird Gross- und Kleinschreibung *nicht* beruecksichtigen - dazu wird die sort()-Funktion entsprechend mit einer Vergleichsfunktion aufgerufen)
sortScripts: 0, // 1 zum Erzwingen der Sortierung
// Einbindung GM-Skripte-Ordner (0: nein, 1: Greasemonkey [Profil-Verzeichnis], 2: UserScriptLoader [Chrome-Verzeichnis], 3: Scriptish [Profil-Verzeichnis]):
gmOrdner: 0,
// Einbindung CSS-Ordner (0: nein, 1: UserCSSLoader-Ordner im Chrome-Verzeichnis):
cssOrdner: 0,
// Nachfolgend gueltige about:Adressen eintragen, die ebenfalls aufgerufen werden sollen oder
// zum Ausblenden: abouts: [],
// Damit die about:-Seiten nicht als Untermenue, sondern direkt als Menuepunkte aufgefuehrt werden, muss das erste Element '0' sein:
// Zum Beispiel so: abouts: ['0','about:about','about:addons','about:cache','about:config','about:support'],
abouts: [
'about:about',
'about:debugging#/runtime/this-firefox',
'about:cache',
'about:config',
'about:crashes',
'about:downloads',
'about:home',
'about:logins',
'about:memory',
'about:support',
'about:preferences',
'about:performance',
'about:profiles'
],
// Die normalen Firefox-Einstellungen auch zur Verfuegung stellen (0: nein, 1: ja):
showNormalPrefs: 0,
// Stellt "Skriptliste in Zwischenablage" zur Verfuegung (1: ja, 2: mit getrennter Nummerierung, 3: mit gemeinsamer Nummerierung) oder nicht (0):
enableScriptsToClip: 1,
// Um den Eintrag "Neustart" zu erzwingen (falls z.B. das andere Skript zu spaet eingebunden und nicht erkannt wird), auf 1 setzen:
enableRestart: 0,
/*====== KONFIGURATION ***** ENDE ======*/
// ==================================================
// INITIALISIERUNG
// ==================================================
init: function() {
if (typeof CustomizableUI == "undefined") {
console.error("ExtraConfigMenu: CustomizableUI nicht gefunden!");
return;
}
var self = this;
if (!CustomizableUI.getWidget("ExtraConfigMenu-button")) {
CustomizableUI.createWidget({
id: "ExtraConfigMenu-button",
type: "custom",
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(doc) {
return self.buildButton(doc);
}
});
}
},
// ==================================================
// BUTTON UND MENÜ ERSTELLEN
// ==================================================
buildButton: function(doc) {
var self = this;
var button = doc.createXULElement("toolbarbutton");
button.id = "ExtraConfigMenu-button";
button.setAttribute("label", "Extra Config Menü");
button.setAttribute(
"tooltiptext",
"Extra Config Menü\nMittelklick öffnet about:config"
);
button.setAttribute(
"class",
"toolbarbutton-1 chromeclass-toolbar-additional"
);
button.setAttribute("type", "menu");
button.setAttribute("removable", "true");
button.style.listStyleImage =
'url("file:///C:/Users/Ramo/AppData/Roaming/Mozilla/Firefox/Profiles/c612nnc8.default-release/chrome/Icons/extraConf.png")';
button.addEventListener("click", function(event) {
if (event.button == 1) {
openTrustedLinkIn("about:config", "tab");
event.preventDefault();
}
});
var popup = doc.createXULElement("menupopup");
popup.id = "ExtraConfigMenu-popup";
button.appendChild(popup);
this.buildMenu(doc, popup);
// Untermenüs direkt beim Öffnen befüllen
var scriptPopup = button.querySelector("#submenu-ucjs-items");
var cssPopup = button.querySelector("#submenu-css-items");
var shadowPopup = button.querySelector("#submenu-CSSShadow-items");
var webPopup = button.querySelector("#submenu-cssweb-items");
if (scriptPopup) {
scriptPopup.addEventListener("popupshowing", function() {
self.getScripts(0, doc);
});
}
if (cssPopup) {
cssPopup.addEventListener("popupshowing", function() {
self.getCss(3, doc);
});
}
if (shadowPopup) {
shadowPopup.addEventListener("popupshowing", function() {
self.getCss(5, doc);
});
}
if (webPopup) {
webPopup.addEventListener("popupshowing", function() {
self.getCss(4, doc);
});
}
console.log("ExtraConfigMenu: Untermenüs verbunden", {
scripts: !!scriptPopup,
css: !!cssPopup,
shadow: !!shadowPopup,
web: !!webPopup
});
return button;
},
// ==================================================
// HILFSFUNKTIONEN FÜR MENÜS
// ==================================================
menu: function(doc, parent, label, id) {
var m = doc.createXULElement("menu");
m.setAttribute("label", label);
if (id) m.id = id;
parent.appendChild(m);
var popup = doc.createXULElement("menupopup");
if (id) popup.id = id + "-items";
m.appendChild(popup);
return popup;
},
menuItem: function(doc, parent, label, callback, className) {
var item = doc.createXULElement("menuitem");
item.setAttribute("label", label);
if (className) item.setAttribute("class", className);
item.addEventListener("command", callback);
parent.appendChild(item);
return item;
},
separator: function(doc, parent) {
parent.appendChild(doc.createXULElement("menuseparator"));
},
// ==================================================
// HAUPTMENÜ
// ==================================================
buildMenu: function(doc, popup) {
var self = this;
// Scripte
this.menu(doc, popup, "Scripte", "submenu-ucjs");
// CSS
this.menu(doc, popup, "css", "submenu-css");
// CSSShadow
this.menu(doc, popup, "CSSShadow", "submenu-CSSShadow");
// CSSWeb
this.menu(doc, popup, "cssweb", "submenu-cssweb");
// about-Seiten
if (this.abouts.length) {
this.separator(doc, popup);
var aboutPopup = this.menu(
doc,
popup,
"uc.js",
"submenu-about"
);
this.abouts.forEach(function(url) {
self.menuItem(doc, aboutPopup, url, function() {
openTrustedLinkIn(url, "tab");
}, "uProfMenu_about");
});
}
// Scriptliste kopieren
if (this.enableScriptsToClip) {
this.menuItem(doc, popup,
"Scriptliste in Zwischenablage kopieren",
function() {
self.getScripts(1);
},
"uProfMenu_clipboard"
);
}
this.separator(doc, popup);
// Konfigurationsdateien
var configFiles = [
["userChrome.css", 6],
["userChromeShadow.css", 6],
["userContent.css", 6],
["userChrome.js", 6],
["prefs.js", 1],
["user.js", 1]
];
configFiles.forEach(function(entry) {
self.menuItem(doc, popup, entry[0], function() {
self.edit(entry[1], entry[0]);
}, "uProfMenu_edit");
});
this.separator(doc, popup);
// Ordner
if (this.gmOrdner == 1) {
this.addFolder(doc, popup, "GM-skripty",
this.getPrefDirectoryPath("ProfD") +
this.getDirSep() + "gm_scripts");
}
if (this.gmOrdner == 2) {
this.addFolder(doc, popup, "USL-skripty",
this.getPrefDirectoryPath("UChrm") +
this.getDirSep() + "UserScriptLoader");
}
if (this.gmOrdner == 3) {
this.addFolder(doc, popup, "Skripty Scriptish",
this.getPrefDirectoryPath("ProfD") +
this.getDirSep() + "scriptish_scripts");
}
var sep = this.getDirSep();
var chrome = this.getPrefDirectoryPath("UChrm");
var folders = [
["Scripte-Ordner öffnen", chrome + sep + "Scripte"],
["CSS-Ordner öffnen", chrome + sep + "CSS"],
["CSSShadow-Ordner öffnen", chrome + sep + "CSSShadow"],
["CSSWeb-Ordner öffnen", chrome + sep + "CSSWeb"],
["Chrome-Ordner öffnen", chrome],
["Profil-Ordner öffnen", this.getPrefDirectoryPath("ProfD")],
["Icons-Ordner öffnen", chrome + sep + "Icons"],
["Installations-Ordner öffnen", this.getPrefDirectoryPath("CurProcD")],
["Addons-Ordner öffnen",
this.getPrefDirectoryPath("ProfD") + sep + "extensions"],
["Startup-Cache-Ordner öffnen",
this.getPrefDirectoryPath("ProfLD") + sep + "startupCache"]
];
folders.forEach(function(entry) {
self.addFolder(doc, popup, entry[0], entry[1]);
});
if (this.showNormalPrefs) {
this.separator(doc, popup);
this.menuItem(doc, popup, "Einstellungen", function() {
if (typeof openOptionsDialog == "function") {
openOptionsDialog();
} else {
openPreferences();
}
});
}
if (typeof ToolRstartMod != "undefined" || this.enableRestart) {
this.menuItem(doc, popup, "Neustart", function() {
try {
ToolRstartMod.restartApp(false);
} catch(e) {
console.error(e);
}
});
}
},
addFolder: function(doc, popup, label, path) {
var self = this;
this.menuItem(doc, popup, label, function() {
self.dirOpen(path);
}, "uProfMenu_folder");
},
// ==================================================
// DATEIPFADE
// ==================================================
getDirSep: function() {
var os = Services.appinfo.OS;
return os == "WINNT" ? "\\" : "/";
},
getPrefDirectoryPath: function(str) {
var file = Services.dirsvc.get(
str,
Ci.nsIFile
);
if (str == "CurProcD") {
file = file.parent;
}
return file.path;
},
prefDirOpen: function(prefDir) {
this.dirOpen(this.getPrefDirectoryPath(prefDir));
},
dirOpen: function(path) {
if (this.vFileManager) {
var file = Cc["@mozilla.org/file/local;1"]
.createInstance(Ci.nsIFile);
file.initWithPath(this.vFileManager);
var process = Cc["@mozilla.org/process/util;1"]
.createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, [path], 1);
} else {
var dir = Cc["@mozilla.org/file/local;1"]
.createInstance(Ci.nsIFile);
dir.initWithPath(path);
dir.launch();
}
},
// ==================================================
// DATEIEN MIT EDITOR ÖFFNEN
// ==================================================
edit: function(mode, filename) {
var sep = this.getDirSep();
var chrome = this.getPrefDirectoryPath("UChrm");
var profile = this.getPrefDirectoryPath("ProfD");
var path = "";
switch(mode) {
case 0:
path = chrome + sep + this.jsSubfolder + sep + filename;
break;
case 1:
path = profile + sep + filename;
break;
case 3:
path = chrome + sep + "CSS" + sep + filename;
break;
case 4:
path = chrome + sep + "CSSWeb" + sep + filename;
break;
case 5:
path = chrome + sep + "CSSShadow" + sep + filename;
break;
case 6:
path = chrome + sep + filename;
break;
default:
path = filename;
}
this.launch(this.TextOpenExe, path);
},
launch: function(editor, path) {
var file = Cc["@mozilla.org/file/local;1"]
.createInstance(Ci.nsIFile);
var process = Cc["@mozilla.org/process/util;1"]
.createInstance(Ci.nsIProcess);
file.initWithPath(editor);
if (!file.exists()) {
var prefs = Services.prefs;
editor = prefs.getCharPref("view_source.editor.path");
file.initWithPath(editor);
}
process.init(file);
process.run(false, [path], 1);
},
// ==================================================
// DATEIEN EINLESEN
// ==================================================
readFiles: function(folder, extension) {
var result = [];
try {
var dir = Cc["@mozilla.org/file/local;1"]
.createInstance(Ci.nsIFile);
dir.initWithPath(folder);
if (!dir.exists() || !dir.isDirectory()) {
return result;
}
var files = dir.directoryEntries;
while (files.hasMoreElements()) {
var file = files.getNext().QueryInterface(Ci.nsIFile);
if (file.isFile() &&
file.leafName.toLowerCase().endsWith(extension)) {
result.push(file.leafName);
}
}
} catch(e) {
console.error("ExtraConfigMenu: " + folder, e);
}
if (this.sortScripts) {
result.sort(this.stringComparison);
}
return result;
},
stringComparison: function(a, b) {
function clean(s) {
return s.toLowerCase()
.replace(/ä/g, "a")
.replace(/ö/g, "o")
.replace(/ü/g, "u")
.replace(/ß/g, "s");
}
a = clean(a);
b = clean(b);
return a == b ? 0 : a > b ? 1 : -1;
},
// ==================================================
// SCRIPTE
// ==================================================
getScripts: function(type, doc) {
var folder = this.getPrefDirectoryPath("UChrm") +
this.getDirSep() + this.jsSubfolder;
var scripts = this.readFiles(folder, ".uc.js");
if (type == 1) {
var result =
"userChromeJS/uc.js (" + scripts.length + "):\n" +
"------------------------\n" +
scripts.join("\n");
Cc["@mozilla.org/widget/clipboardhelper;1"]
.getService(Ci.nsIClipboardHelper)
.copyString(result);
return;
}
var popup = doc.getElementById("submenu-ucjs-items");
var label = doc.getElementById("submenu-ucjs");
if (!popup || !label) {
console.error("ExtraConfigMenu: Scripte-Menü nicht gefunden!");
return;
}
label.setAttribute("label", "Scripte (" + scripts.length + ")");
this.fillScriptMenu(doc, popup, scripts);
},
fillScriptMenu: function(doc, popup, scripts) {
var self = this;
while (popup.firstChild) {
popup.firstChild.remove();
}
scripts.forEach(function(script) {
var item = doc.createXULElement("menuitem");
item.setAttribute("label", script);
item.setAttribute("class", "uProfMenu_ucjs");
item.addEventListener("command", function() {
self.edit(0, script);
});
item.addEventListener("click", function(event) {
if (event.button == 1) {
self.openAtGithub(script);
}
if (event.button == 2) {
event.preventDefault();
self.searchGithub(script);
}
});
popup.appendChild(item);
});
},
// ==================================================
// CSS-DATEIEN
// ==================================================
getCss: function(type, doc) {
var folderName = "";
var menuId = "";
var title = "";
if (type == 3) {
folderName = "CSS";
menuId = "submenu-css";
title = "Meine CSS-Dateien";
}
if (type == 4) {
folderName = "CSSWeb";
menuId = "submenu-cssweb";
title = "Meine CSSWeb-Dateien";
}
if (type == 5) {
folderName = "CSSShadow";
menuId = "submenu-CSSShadow";
title = "Meine CSSShadow-Dateien";
}
var folder = this.getPrefDirectoryPath("UChrm") +
this.getDirSep() + folderName;
var files = this.readFiles(folder, ".css");
var popup = doc.getElementById(menuId + "-items");
var label = doc.getElementById(menuId);
if (!popup || !label) return;
label.setAttribute("label", title + " (" + files.length + ")");
while (popup.firstChild) {
popup.firstChild.remove();
}
var self = this;
files.forEach(function(filename) {
self.menuItem(doc, popup, filename, function() {
self.edit(type, filename);
}, "uProfMenu_css");
});
},
// ==================================================
// GITHUB
// ==================================================
cleanFileName: function(name) {
name = name.toLowerCase();
var regs = [
/\.uc\.js$/,
/\.uc\.xul$/,
/^ucjs_/,
/_\d.+/,
/_fx\d+/,
/[-+\.]/g,
/_v\d+/
];
regs.forEach(function(reg) {
name = name.replace(reg, "");
});
return name;
},
openAtGithub: function(script) {
var url =
"https://github.com/ardiman/userChrome.js/tree/master/" +
this.cleanFileName(script);
openWebLinkIn(url, "tab");
},
searchGithub: function(script) {
var url =
"https://github.com/search?langOverride=&language=&q=" +
encodeURIComponent(script) +
"&repo=&start_value=1&type=Code";
openWebLinkIn(url, "tab");
}
};
// ==================================================
// START
// ==================================================
try {
uProfMenu.init();
} catch(e) {
console.error("ExtraConfigMenu Fehler:", e);
}
})();
Alles anzeigen
Und da ist es ja wieder!
So ein Konfigurationsbereich wird so völlig überbewertet!
Interessant ist es schon, dass zwar hier im Forum gelesen wird,
aber im Skript irgendwie gar nicht!
Sind ja auch ein Buch mit den sieben Siegeln, oder Chinesisch.
Nur zur Erinnerung, es steht alles recht genau erklärt da!
// ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
// Hier kann der Pfad zum einem Texteditor eintragen werden
// (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen:
//TextOpenExe: 'C:\\Program Files (x86)\\Notepad++\\notepad++.exe',
TextOpenExe: 'C:\\Program Files\\Microsoft VS Code\\Code.exe',
// Falls gewuenscht, kann hier ein Dateimanager eintragen (komplett leer lassen fuer Dateimanager des Systems) Beispiele:
// vFileManager: 'E:\\Total Commander\\Totalcmd.exe',
// vFileManager: 'C:\\Program Files (x86)\\FreeCommander\\FreeCommander.exe'
vFileManager: '',
// In der folgenden Zeile kann festgelegt werden, ob ein verschiebbarer Button erstellt wird:
showAsButton: 1, // 1: ja / Button wird erstellt, 0: nein / Menue unter "Extras"
// Unter Linux sollte/kann versucht werden, die userChromeJS-Skripte zu sortieren, unter Windows ist das evtl. nicht noetig (die Sortierung wird Gross- und Kleinschreibung *nicht* beruecksichtigen - dazu wird die sort()-Funktion entsprechend mit einer Vergleichsfunktion aufgerufen)
sortScripts: 0, // 1 zum Erzwingen der Sortierung
// Zeigt die Datei userChromeShadow.uc.js falls vorhanden in der Skriptliste an (1: ja, 0: nein):
showuCS: 0, // Default => 0
// Einbindung CSS-Ordner (0: nein, 1: UserCSSLoader-Ordner im Chrome-Verzeichnis):
cssOrdner: 1,
// Falls Javacripte sich nicht nur im chrome-Verzeichnis, sondern auch in einem Unterverzeichnis befinden,
// hier den Ordnernamen des Unterverzeichnises eintragen.
// Sonst: '' , es werden dann nur die Skripte aus dem chrome-Verzeichnis angezeigt
jsSubfolder: 'scripts',
// Nachfolgend gueltige about:Adressen eintragen, die ebenfalls aufgerufen werden sollen oder
// zum Ausblenden: abouts: [],
// Damit die about:-Seiten nicht als Untermenue, sondern direkt als Menuepunkte aufgefuehrt werden, muss das erste Element '0' sein:
// Zum Beispiel so: abouts: ['0','about:about','about:addons','about:cache','about:config','about:support'],
abouts: ['about:about','about:addons','about:cache','about:config','about:crashes',
'about:downloads','about:home','about:logins','about:memory','about:support',
'about:preferences','about:performance','about:profiles'
],
// Die normalen Firefox-Einstellungen auch zur Verfuegung stellen (0: nein, 1: ja):
showNormalPrefs: 1,
// Stellt "Skriptliste in Zwischenablage" zur Verfuegung (1: ja, 2: mit getrennter Nummerierung, 3: mit gemeinsamer Nummerierung) oder nicht (0):
enableScriptsToClip: 2,
// Um den Eintrag "Neustart" zu erzwingen (falls z.B. das andere Skript zu spaet eingebunden und nicht erkannt wird), auf 1 setzen:
enableRestart: 1,
// Button-Aussehen (1: flexibles SVG-Icon aus Icon-Ordner, 0: festes Base64-PNG-Icon):
buttonStyle: 1, // Default => 0
// Symbol (Icon) nur fuer Button:
icon: 'edit.svg', // [Name.Dateiendung] des Symbols
iconColour: '#FF00FF', // Farbe fuer das SVG-Icon setzen (leer fuer Originalfarbe)
iconPath: '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
// ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Alles anzeigen