Gibt es denn Fehler in der Konsole, wenn es nicht mehr klappt?
Button um weiteres Profil zu öffnen
-
Mira_Belle -
20. Juli 2023 um 14:01 -
Erledigt
-
-
Gibt es denn Fehler in der Konsole, wenn es nicht mehr klappt?
Nichts was ich zuordnen könnte; ich spiele das nochmal durch im Moment, mal schauen ob was Neues auftaucht wenn das Script aufhört zu funktionieren.
-
Der gezeigte Fehler erscheint erst, wenn es nicht mehr geht? Der Fehler kommt aus einem anderen Script. Da ich keine Scripts nutze, weiß ich nicht, ob sich Fehler in einem Script auch auf andere auswirken. Tritt das Problem auch ohne dieses Script auf?
-
Der gezeigte Fehler erscheint erst, wenn es nicht mehr geht? Der Fehler kommt aus einem anderen Script. Da ich keine Scripts nutze, weiß ich nicht, ob sich Fehler in einem Script auch auf andere auswirken. Tritt das Problem auch ohne dieses Script auf?
Das ist tatsächlich ein anderesScript das hier immer einen Error erzeugt, aber funktioniert.
Ob das einen Einfluss hat kann ich momentan nicht sagen, muss ich mal testen - nur weigert sich jetzt gerade das Profilbuttonscript aufzuhören zu funktionieren...
-
Gibt es denn Fehler in der Konsole, wenn es nicht mehr klappt?
Jetzt hat das Script endlich aufgehört zu funktionieren ; hier der Error in der Konsole:
CustomizableUI: unable to normalize widget hatte ich schon vorher mal in der Konsole gesehen, war mir aber nicht sicher ob es mit dem Script zusammenhängt.
Wie (nachträglich) erwähnt, der Button ist bei mir im Überhangmenü; andere Scripts die ebenfalls dort sind haben das Problem nicht.
Nach wie vor kann ich aber das Problem nicht reproduzieren oder provozieren, es scheint zufällig aufzutauchen.
-
Kam denn eine der Meldungen neu dazu, als es aufhörte zu funktionieren, oder waren die Fehler alle schon vorher da? Die einzige Stelle im Code, welche unable to normalize widget loggen kann, ist nämlich die Stelle, an der createWidget() aufgerufen wird. Und das sollte ja nur ein einziges Mal pro Script sein. Insofern würde es mich wundern, wenn das direkt mit deinem Problem zusammenhängt.
Der letzte Fehler ist aber wieder der aus dem anderen Script. Bekommst du den gleichen Fehler denn auch vom anderen Script, während das dieses Script hier noch funktioniert?
-
Kam denn eine der Meldungen neu dazu, als es aufhörte zu funktionieren, oder waren die Fehler alle schon vorher da? Die einzige Stelle im Code, welche unable to normalize widget loggen kann, ist nämlich die Stelle, an der createWidget() aufgerufen wird. Und das sollte ja nur ein einziges Mal pro Script sein. Insofern würde es mich wundern, wenn das direkt mit deinem Problem zusammenhängt.
Der letzte Fehler ist aber wieder der aus dem anderen Script. Bekommst du den gleichen Fehler denn auch vom anderen Script, während das dieses Script hier noch funktioniert?
Soweit ich es beobachten kann - wie gesagt kann ich das Problem leider nicht willentlich verursachen - taucht der Error unable to normalize widget nur mit diesem Script auf.
Die anderen Fehlermeldungen/Warnungen sind immer in der Konsole.
Und das gerade gesehen.
-
Ich glaube ich kann mein Problem mit dem Originalscript von Mira_Belle jetzt reproduzieren:
Korrigierte Beschreibung :
Firefox öffnen, das Programm öffnet mit einem Browser Fenster (Fenster A).
Script Button funktioniert; jetzt neues Fenster B öffnen, dann das Fenster A - das erste beim Start geöffnete Fenster - schliessen.
Script Button funktioniert nicht mehr in Fenster B oder anderen Fenstern, sobald Fenster A geschlossen wurde.
Solange das erste beim Programmstart geöffnete Browserfenster offen ist, funktioniert das Script, auch in danach geöffneten zusätzlichen Fenstern, aber nur dann.
Würde mich interessieren, ob jemand anders das auch beobachten kann.
Was mich vage an das hier erinnert hat, und an die Lösung die mal wieder BrokenHeart geliefert hatte.
Das Problem könnte diese Zeile im Script sein: toolbaritem.onclick = event => onClick(event); .
Was nach ersten Tests hier zu klappen scheint ist sowas, Icon Name und Profilname etc. anzupassen, wesentliche Änderungen in Zeilen 14 und 31 (- 36):
Nur Test, offizielle Versionen von Mira !
JavaScript
Alles anzeigen//Test Fix (function() { if (location.href !== 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'Leerprofil_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 currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); let buttonIcon = "LettersL-1.png"; //toolbaritem.onclick = event => onClick(event); let props = { id: 'Leerprofil_button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', removable: 'true', overflows: 'true', label: 'Leerprofil', tooltiptext: 'Leerprofil Button', style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonIcon) +'");', }; for (var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); } catch(e) { }; document.getElementById('Leerprofil_button').addEventListener( "click", onClick ); function onClick(event) { if (event.button == 0) { let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); let arguments = ["-foreground", "-no-remote", "-P", "Leerprofil"]; // Profil Name file.initWithPath("C:\\Program Files\\Mozilla Firefox\\firefox.exe"); // Pfad Windows //file.initWithPath("/Applications/Firefox.app/Contents/MacOS/firefox-bin"); // Pfad Mac let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.run(false, arguments, arguments.length); // Profil wird bestätigt } } })();
-
Schon komisch!
Habe drei Profile, in allen dreien ist das Skript.
Der Button in Profil 1 öffnet eine neue Instanz mit Profil 2,
der Button dort, eine neue mit Profil 3
und der Button dort wiederum eine neue mit Profil 1.
Ich kann Instanzen beenden, switchen, wie ich will.
Es funktioniert alles reibungslos!
Was natürlich nicht geht, eine zweite Instanz mit gleichem Profil zu starten,
da gibt es dann eine Meldung!
AH, .... Fenster
Eben ist der Groschen gefallen.
Und ja, Du hast recht.
-
Also ich nutze dieses Skript.
Wegen eines Fehlers musste ich den Code zum Einbeziehen des Symbols
umschreiben und nutze jetzt halt CSS um den Pfad anzugeben und das Symbol anzusprechen.
JavaScript
Alles anzeigen// JavaScript Document // QuickProfilesChangesButton.uc.js // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1231647#post1231647 // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1232240#post1232240 // Version 1.07 from August 3, 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'); 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', }; 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 = "user-group_2.svg"; // Name & Dateiendung des anzuzeigenden Symbols! var css =` #profileschange-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") } #profileschange-button.toolbarbutton-1.chromeclass-toolbar-additional image.toolbarbutton-icon { width: 30px !important; height: 30px !important; } `; 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\\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 } })();
Wenn ich nun versuche Deine Änderungen irgendwie unterzubringen, funktioniert das Skript nicht mehr.Der Button wird zwar erzeugt, aber das Symbol ist nicht vorhanden und der Button ist ohne Funktion.
Werde mir das Sonntag mal genauer anschauen
Auch wollte ich das CSS anders einbinden.
OH, wenn man etwas konzentrierter vorgeht, funktioniert es auch.
Hier meine überarbeitete Version mit beiden Änderungen zum testen.
JavaScript
Alles anzeigen// JavaScript Document // QuickProfilesChangesButton.uc.js // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1231647#post1231647 // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1232240#post1232240 // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1233121#post1233121 // Version 1.08 from August 11, 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'); // 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', }; 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 = "user-group_2.svg"; // 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}") } #profileschange-button.toolbarbutton-1.chromeclass-toolbar-additional image.toolbarbutton-icon { width: 30px !important; height: 30px !important; } `), 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\\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 } })();
-
Soweit ich das jetzt in meinen kurzen Tests festgestellt habe, scheint es zu funktionieren.
Wenn das auch von anderen bestätigt wird, werde ich Horstmann im Skript "verewigen"!
Und bitte auch darum, das Skript dann auch so zu verwenden, inkl. Quellenangabe.
-
Ich kann Instanzen beenden, switchen, wie ich will.
Es funktioniert alles reibungslos!
Was natürlich nicht geht, eine zweite Instanz mit gleichem Profil zu starten,
da gibt es dann eine Meldung!
Das ist bei mir auch so.
AH, .... Fenster
Eben ist der Groschen gefallen.
Und ja, Du hast recht.
Bei mir fällt leider kein Groschen. Kannst du mit einer Erklärung helfen? Vielen Dank.
-
Soweit ich das jetzt in meinen kurzen Tests festgestellt habe, scheint es zu funktionieren.
Wenn das auch von anderen bestätigt wird, werde ich Horstmann im Skript "verewigen"!
Und bitte auch darum, das Skript dann auch so zu verwenden, inkl. Quellenangabe.
Funktioniert hier auf dem Mac, Danke!
Ich glaube dass ich einen Mac habe macht das kleine Problem für mich auch offensichtlicher.
Ist es in Windows nicht so, dass durch das Schliessen aller Programm/Instanzfenster dieses Programm/die Instanz beendet wird?
Auf meinem Mac ist das bei den meisten Programmen nicht der Fall, die müssen aktiv beendet werden auch wenn keine Fenster vorhanden sind.
Wenn ich also mit Firefox Instanz A das Profil bzw Instanz B öffne, kann ich das/alle Fenster in Instanz A schliessen, die Instanz A läuft aber weiter im Hintergund, das Icon von Instanz A bleibt auch aktiv im Dock (Win Taskleiste?).
Bei 3 offenen Profilen/Instanzen, aber alle deren Fenster geschlossen, sieht das Dock dann so aus:
Ich kenne Windows kaum, weiss nicht wie das dort funktioniert...
In meinem Fall kann ich also jede Instanz mit Anklicken direkt aufrufen, und es öffnet sich ein Fenster - was aber eben nicht das selbe Fenster ist, das beim ersten Start der jeweiligen Instanz geöffnet wurde --> Button hatte nicht mehr funktioniert.
-
Ist es in Windows nicht so, dass durch das Schliessen aller Programm/Instanzfenster dieses Programm/die Instanz beendet wird?
Ja, auf Windows ist das so. -
Bei mir fällt leider kein Groschen
Hallo geldhuegel .
Starte ganz normal den Fx.
Dann einen Rechtsklick auf einen beliebigen Link/Lesezeichen..In neuem Fenster öffnen..
Dann zurück in das erste Fenster gehen, und oben per X beenden.
Dann bleibt ja das 2te Fenster noch offen.
Und nun mal auf den Button klicken um das andere Profil zu starten.
Und genau das funktioniert dann nicht aus diesem Fenster.
-
Groschen!
Also, man öffne eine Instanz, surft etwas herum und sieht einen unwiderstehlichen Link,
auf den man unbedingt klicken muss!
Jetzt hat man ja zwei Möglichkeiten, in neuem Tab öffnen
oder in neuem Fenster öffnen!
Wählt man "in neuem Tab" lässt sich das Problem nicht nachvollziehen.
Wählt man jedoch "in einem neuen Fenster" schon
Denn switche ich jetzt, "per Button eine neue Instanz mit einem neuen Profil",
und schließe versehentlich oder auch gewollt, das allererste Fenster,
und dann auch später das Fenster mit der "neuen Instanz", funktioniert
der Button zum Öffnen "einer neuen Instanz mit einem neuen Profil" plötzlich nicht mehr.
Mit Horstmanns Änderung am Code geht es aber
UND, dieser "kleine Bug", den Horstmann beschrieben hatte, tritt also auch unter Windows auf.
Ist jetzt nicht so tragisch, finde ich, denn gedacht war das ja nur, um in einem Testprofil Änderungen auszutesten,
und dann dieses auch wieder zu schließen.
ABER, Menschen sind halt auch im Verhalten so ganz anders, und jeder macht, was er will.
Deshalb habe ich den Code von Horstmann übernommen.
-
Ich danke Euch. Jetzt habe ich es begriffen.
ZitatIst jetzt nicht so tragisch, finde ich, denn gedacht war das ja nur, um in einem Testprofil Änderungen auszutesten,
und dann dieses auch wieder zu schließen.
Genau dafür habe ich das jetzt schon zweimal verwendet und da funktionierte alles bestens. Nochmals vielen Dank.
-
Ich danke Euch.
Was mich davon betrifft, gern geschehen
-
was gibt es da zu lachen
-
UND, dieser "kleine Bug", den Horstmann beschrieben hatte, tritt also auch unter Windows auf.
Ist jetzt nicht so tragisch, finde ich, denn gedacht war das ja nur, um in einem Testprofil Änderungen auszutesten,
und dann dieses auch wieder zu schließen.
ABER, Menschen sind halt auch im Verhalten so ganz anders, und jeder macht, was er will.
Deshalb habe ich den Code von Horstmann übernommen.
IdR habe ich auch nur Tabs im Spiel in einem Fenster, und der Button ist auch hier nur für ein bestimmtes Testprofil.
Ausserdem schliesse ich unbenutzte Programme normalerweise.
Aber wegen dem beschriebenen Macverhalten kommt es immer mal wieder vor, dass ich das Fenster vom Startprofil schliesse, einfach damit es aus dem Weg ist (gerade auch wenn ich an einem Testprofil rumbastle), während aber das Startprofil/Startinstanz fensterlos im Hintergrund weiterläuft.
Auf dem Mac ist das ein nicht ungewöhnliches Prozedere, deshalb kam das Problem bei mir recht regelmässig vor.
Hat ewig gedauert das zu kapieren, bis ich mich an den anderen Beitrag erinnert habe, wo es ein verwandtes Problem gab...
-