chon komisch, dass so ein Profil ein Eigenleben entwickelt und dann gar nicht mehr so will, wie es soll?
Naja, eigentlich funktioniert es ja so wie es soll, nur halt mit dem Script gibt nun ein Problem,sonst läuft es ohne Probleme.
chon komisch, dass so ein Profil ein Eigenleben entwickelt und dann gar nicht mehr so will, wie es soll?
Naja, eigentlich funktioniert es ja so wie es soll, nur halt mit dem Script gibt nun ein Problem,sonst läuft es ohne Probleme.
es steht nur noch eine Rückmeldung aus
Ich kann zumindest schon einmal sagen, in einem Testprofil funktioniert schon mal Testversion_2a.js, also scheint der Hund in meinem Arbeitsprofil begraben. Ich habe alle Scripte und CSS-Dateien aus dem Arbeitsprofil in Testprofil kopiert und Testversion_2a.js funktioniert noch immer und es gibt keine Fehlermeldung in der Konsole.
warum Dein System
Am System selbst liegt es eher nicht, nur am Arbeitsprofil, aber das schleppe ich auch schon sehr lange mit mir herum.
Sei doch bitte mal so lieb und lösche den Skript cache und mache die Testreihe noch einmal.
Hier mal nach dem Test exemplarisch die Meldung aus der Konsole.
15:42:45.054 Uncaught TypeError: document.getElementById(...) is null
<anonymous> file:///H:/Profile/Firefox/Fx57-H-Default/chrome/Testversion_2a.js:30
<anonymous> file:///H:/Profile/Firefox/Fx57-H-Default/chrome/Testversion_2a.js:45
loadScript file:///C:/Program Files/RV/Mozilla Firefox/userChromeJS/utilities.js:114
Testversion_2a.js:30:13
<anonym> file:///H:/Profile/Firefox/Fx57-H-Default/chrome/Testversion_2a.js:30
<anonym> file:///H:/Profile/Firefox/Fx57-H-Default/chrome/Testversion_2a.js:45
loadScript file:///C:/Program Files/RV/Mozilla Firefox/userChromeJS/utilities.js:114
%appdata%\Mozilla\Firefox\Profiles\Profilname\chrome_debugger_profile\startupCache
Hm, ich denke, das das der falsche startupCache-Ordner ist, meinst Du nicht eher den startupCache-Ordner auf der obersten Ebene des Profils sprich den ↓?
%appdata%\Mozilla\Firefox\Profiles\Profilname\startupCache
Sei doch bitte mal so lieb und lösche den Skript cache und mache die Testreihe noch einmal.
Aber immer den Skript cache vor jedem Testlauf löschen.
Hm,
das mache ich doch bei jeder Änderung eines Scripts.
Hat es Fehlermeldungen in der Konsole gegeben?
20:33:19.279 Uncaught TypeError: document.getElementById(...) is null
<anonymous> file:///xxx/Fx57-H-Default/chrome/Testversion_2a.js:30
<anonymous> file:///xxx/Fx57-H-Default/chrome/Testversion_2a.js:45
loadScript file:///C:/Program Files/RV/Mozilla Firefox/userChromeJS/utilities.js:114
Testversion_2a.js:30:13
<anonym> file:///xxx/Fx57-H-Default/chrome/Testversion_2a.js:30
<anonym> file:///xxx/Fx57-H-Default/chrome/Testversion_2a.js:45
loadScript file:///C:/Program Files/RV/Mozilla Firefox/userChromeJS/utilities.js:114
Erschien ein Button, war das Symbol sichtbar?
Oder gab es den Button, aber war er ohne Funktion?
Der Button ist mit Symbol da, ist aber bei den beiden genannten ohne Funktion.
Bei meinem System, Windows 10 Build 19045.3324, mit dem FF 116.0.2, funktionieren außnahmslos alle Skripte!
Sieht hier bei mir mit Firefox 16.0.2 64Bit und Windows 10 Pro 64 Bit so ↓ aus.
Funktioniert:
Testversion_1.js
Testversion_2.js
Funktioniert nicht:
Testversion_1a.js
Testversion_2a.js
Nur aus Neugierde, gibt es auch eine Fehlermeldung zu document.getElementById...etc, wenn der komplette CSS Teil raus ist?
Mit dem ↓ Script zumindest gibt es keine Fehlermeldung mehr.
// JavaScript Document
// QuickProfilesChangesButton.uc.js
// Source code https://www.camp-firefox.de/forum/thema/136664/?postID=1233148#post1233148
// Mit wichtiger Änderung von Horstmann!
// Version 1.10b from August 14, 2023
(function() {
if (location.href !== 'chrome://browser/content/browser.xhtml') return;
try {
CustomizableUI.createWidget({
id: 'profileschange-button',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
let iconDirectory = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Profilpfad zum Ordner des Symbols
let buttonIcon = "monitor.png"; // Name & Dateiendung des anzuzeigenden Symbols. Hier "XXX.xxx" das eigene Symbol inkl. Dateiendung eintragen
toolbaritem.onclick = event => onClick(event);
var props = {
id: 'profileschange-button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: 'true',
label: 'Profil zusätzlich starten',
accesskey: '', // Wer möchte kann hier z.B. 'C' eintragen, dann kann per "Alt + C" das Skript ausgeführt werden
tooltiptext: 'Profile Changer',
style: 'list-style-image: url("' + iconDirectory + '/' + buttonIcon + '");',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e) { };
// var css =`
// #profileschange-button {
// list-style-image: url("${ProfilePath}/${ButtonIcon}");
// }
// `;
// var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
// var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
// sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
function onClick(event) {
if (event.button != 0){
return;
}
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
// let arguments = ["-no-remote", "-P", "Standard-Benutzer", "-foreground"]; // Profil wird ausgewählt Hier "XXX" den gewünschten Profilnamen eintragen
let arguments = ["-no-remote", "-P"]; // Wer lieber den Profilmanager aufrufen möchte,nutzt diese Zeile!
file.initWithPath("C:\\Program Files\\RV\\Mozilla Firefox\\firefox.exe"); // Pfad zur Firefox-Installation
// file.initWithPath("/Applications/Firefox.app/Contents/MacOS/firefox"); // Pfad zur Firefox-Installation, Dateipfad für Mac User
let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, arguments, arguments.length); // Profil wird bestätigt
}
})();
Alles anzeigen
Wann das Skript Version 1.10b fehlerfrei funktioniert, wird dann auch eine Fehlermeldung ausgegeben?
Habe ich das richtig verstanden?
Mittlerweile wird keine Fehlermeldung mehr angezeigt.
Also gehe ich jetzt ganz stark mal davon aus, dass das nicht der Grund für das Versagen des Skripts bei geldhuegel ist.
Der Fehler muss woanders sein.
Wie gesagt, bei mir hatte Version 1.10 auch nicht funktioniert, aber die korrigierte Version 1.10b funktioniert nun und die Grafik wird angezeigt.
Hallo Mira_Belle,
die Entwickler-Werkzeuge zeigen das ↓ als Fehler an.
Grafik konnte nicht geladen werden.
Element {
list-style-image: url("file:///H:/Profile/Firefox/Fx57-H-Default/chrome/iconsmonitor.png");
}
Beachte dabei beim Pfad auf den fehlenden Slash zwischen icons und monitor.png.
Hallo Mira_Belle,
ich denke ich habe den Fehler gefunden, das * muss wohl so ** aussehen.
*
**
Gibt es da auch die Fehlermeldungen?
Ja, aber die Version funktioniert trotz der gleichen Fehlermeldung, nur wird das list-style-image nicht angezeigt.
Hier ↓ noch das angepasste Script.
// JavaScript Document
// QuickProfilesChangesButton.uc.js
// Source code https://www.camp-firefox.de/forum/thema/136664/?postID=1233148#post1233148
// Mit wichtiger Änderung von Horstmann!
// Version 1.10b from August 14, 2023
(function() {
if (location.href !== 'chrome://browser/content/browser.xhtml') return;
try {
CustomizableUI.createWidget({
id: 'profileschange-button',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
let iconDirectory = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Profilpfad zum Ordner des Symbols
let buttonIcon = "monitor.png"; // Name & Dateiendung des anzuzeigenden Symbols. Hier "XXX.xxx" das eigene Symbol inkl. Dateiendung eintragen
toolbaritem.onclick = event => onClick(event);
var props = {
id: 'profileschange-button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: 'true',
label: 'Profil zusätzlich starten',
accesskey: '', // Wer möchte kann hier z.B. 'C' eintragen, dann kann per "Alt + C" das Skript ausgeführt werden
tooltiptext: 'Profile Changer',
style: 'list-style-image: url("' + iconDirectory + buttonIcon + '");',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e) { };
var css =`
#profileschange-button {
list-style-image: url("${ProfilePath}/${ButtonIcon}");
}
`;
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
function onClick(event) {
if (event.button != 0){
return;
}
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
// let arguments = ["-no-remote", "-P", "Standard-Benutzer", "-foreground"]; // Profil wird ausgewählt Hier "XXX" den gewünschten Profilnamen eintragen
let arguments = ["-no-remote", "-P"]; // Wer lieber den Profilmanager aufrufen möchte,nutzt diese Zeile!
file.initWithPath("C:\\Program Files\\RV\\Mozilla Firefox\\firefox.exe"); // Pfad zur Firefox-Installation
// file.initWithPath("/Applications/Firefox.app/Contents/MacOS/firefox"); // Pfad zur Firefox-Installation, Dateipfad für Mac User
let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, arguments, arguments.length); // Profil wird bestätigt
}
})();
Alles anzeigen
Was mich stutzig macht, ist die Fehlermeldung
Etwas ähnliches schlägt mittlerweile auch hier auf, nur halt andere Zeilenangaben, Zeile 39 und 53, hier mal mein Script der V1.10..
// JavaScript Document
// QuickProfilesChangesButton.uc.js
// Source code https://www.camp-firefox.de/forum/thema/136664/?postID=1233148#post1233148
// Mit wichtiger Änderung von Horstmann!
// Version 1.10 from August 12, 2023
(function() {
if (location.href !== 'chrome://browser/content/browser.xhtml') return;
try {
CustomizableUI.createWidget({
id: 'profileschange-button',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var props = {
id: 'profileschange-button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: 'true',
label: 'Profil zusätzlich starten',
accesskey: '', // Wer möchte kann hier z.B. 'C' eintragen, dann kann per "Alt + C" das Skript ausgeführt werden
tooltiptext: 'Profile Changer',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e) { };
let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Pfad zum Profilordner und gleich in den entsprechenden Unterordner
let ButtonIcon = "processor.png"; // Name & Dateiendung des anzuzeigenden Symbols!
let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
#profileschange-button {
list-style-image: url("${ProfilePath}/${ButtonIcon}");
}
`), null, null);
sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
document.getElementById('profileschange-button').addEventListener( "click", onClick );
function onClick(event) {
if (event.button != 0){
return;
}
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
// let arguments = ["-no-remote", "-P", "Standard-Benutzer", "-foreground"]; // Profil wird ausgewählt Hier "XXX" den gewünschten Profilnamen eintragen
let arguments = ["-no-remote", "-P"]; // Wer lieber den Profilmanager aufrufen möchte,nutzt diese Zeile!
file.initWithPath("C:\\Program Files\\RV\\Mozilla Firefox\\firefox.exe"); // Pfad zur Firefox-Installation
// file.initWithPath("/Applications/Firefox.app/Contents/MacOS/firefox"); // Pfad zur Firefox-Installation, Dateipfad für Mac User
let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, arguments, arguments.length); // Profil wird bestätigt
}
})();
Alles anzeigen
Kannst Du mal in der Konsole nach Fehlermeldungen suchen?
Hm, sehr merkwürdig, hier schlagen in der Konsole keine Fehlermeldungen bezüglich des Scripts in Version 1.10 auf.
Nun habe ich krampfhaft versucht den Fehler zu finden, warum einige Popup-Menüs kurz nach dem öffnen wieder schließen, wenn die Maus darüber gehalten wird, so z.B. Überhangmenü, Hamburger Menü, u.a. Wird das Script entfernt, dann passiert das nicht.
Woran könnte das liegen?
Das Script habe ich auch, aber ich hatte auch das Hamburger-Restart-Script und bei mir hat das deaktivieren des Hamburger-Restart-Script das Problem beseitigt, das Tooltip-CSS-Script läuft hier ohne Probleme.
Ich werde es aber nachher mal probieren, ob auch ein deaktivieren Tooltip-CSS-Script bei aktiviertem Hamburger-Restart-Script hilft.
Teste die Version mal, da sind Änderungen wohl drin:
Ich habe mich für die 2te Version ohne das Löschen des Caches entschieden, den ein solches habe ich ja schon in der 'Vertical Add-on Bar' script for Firefox 60+ by Aris.
Ich habe hier keinen Mittelklick.
Darum machen Links- und Rechtsklick hier das gleiche.
Ok, aber was macht das Script bei welchem Klick, wenn man alle 3 Klicks ( Links-, Mittel- und Rechtsklick) verwenden kann?
aber mein Skript funktioniert einwandfrei
Funktioniert in der Tat ohne Probleme, aber das ↓ verwirrt mich, ist das so korrekt?
tooltiptext: 'Neustart (mit Rechts 2- und Linksklick 0 wird der userChrome.js-Cache geleert)'
Das andere Script werde ich auch gleich mal testen.
Hallo zusammen,
gibt es von dieser ↓ Variante des Restart-Scripts eine neue Version? Ich frage deshalb, weil es im 118'er Nightly nicht funktioniert.
// Restart button script for Firefox 60+ by Aris
//
// left-click on restart button: normal restart
// middle-click on restart button: restart + clear caches
// right-click on restart button: no special function
//
// based on 'Quit' button code by 2002Andreas
// restart code from Classic Theme Restorer add-on
// invalidate caches from Session Saver add-on
(function() {
try {
Components.utils.import("resource:///modules/CustomizableUI.jsm");
var {Services} = Components.utils.import("resource://gre/modules/Services.jsm", {});
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
var appversion = parseInt(Services.appinfo.version);
var button_label = "Restart";
try {
switch (document.getElementById("nav-bar").getAttribute("aria-label")) {
case "Navigations-Symbolleiste": button_label = "Neustarten"; break;
case "Панель навигации": button_label = "Перезапустить"; break;
}
} catch(e) {}
CustomizableUI.createWidget({
id: "uc-restart", // button id
defaultArea: CustomizableUI.AREA_NAVBAR,
removable: true,
label: button_label, // button title
tooltiptext: button_label, // tooltip title
onClick: function(event) {
var cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"].createInstance(Components.interfaces.nsISupportsPRBool);
var observerSvc = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
if(event.button=='1') { // middle-click - clear caches
Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).invalidateCachesOnRestart();
}
if(event.button=='0' || event.button=='1') { // left/middle-click - restart
observerSvc.notifyObservers(cancelQuit, "quit-application-requested", "restart");
if(cancelQuit.data) return false;
Services.startup.quit(Services.startup.eRestart | Services.startup.eAttemptQuit);
}
},
onCreated: function(button) {
return button;
}
});
var icon = "chrome://global/skin/icons/reload.svg";
if(appversion < 92) icon = "chrome://browser/skin/reload.svg";
// style button icon
var uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent('\
\
#uc-restart .toolbarbutton-icon {\
list-style-image: url("'+icon+'"); /* icon / path to icon */ \
transform: scaleX(-1); /* icon mirroring */\
fill: white; /* icon color name/code */\
}\
\
'), null, null);
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
} catch (e) {
Components.utils.reportError(e);
};
})();
Alles anzeigen
Also auf "Benachrichtigungsassistent" und nicht auf "nur Alarme" oder "nur mit Priorität" eingestellt?
Das lag der Hund bei mir begraben, stand hier auf Alarme.
Das muss hier aktiviert werden:
Ist so eingestellt.