Hier sind mehrere uc.xul-Skripte installiert, deren Menüeinträge oder Icons nach Neustarts teilweise verschwinden (und die genauso nach Neustarts auch wieder auftauchen können). Ich habe die Skripte wie auch die userChrome.js neuinstalliert, versucht, die Sache systematisch zu untersuchen und eine Regelmäßigkeit o.ä. festzustellen, aber alles ohne Erfolg. Ich wollte deswegen schon einen Beitrag schreiben, stieß dann aber auf Mithrandirs Beitrag und in dessen Folge auf die "Known Issues" auf http://userchromejs.mozdev.org/, sowie die dortige FAQ.
ZitatKnown Issues:
Loading multiple overlays is hit or miss.
Due to Bug 330458, an overlay must finish before another can be called, otherwise neither is successful. setTimout() values are used internally to minimize this problem but there is no guarantee; overlay cdata (if any) needs to consider overlay completions. See the FAQ for a workaround, if necessary.
NOTE: the log message does not strictly mean an overlay has completed, but rather that the overlay merge of the given file has been invoked.
NOTE: a proper fix would implement an observer and serialization, but it's better if the core bug is fixed..
Das Problem scheint also bekannt zu sein und es wird empfohlen, als "Behelfslösung" bis o.g. Bug gefixt ist, bestimmte loadOverlayDelay-Werte hochzusetzen. Hier im Forum wurde zusätzlich noch empfohlen, evtl. mit der Reihenfolge, in der die Skripte geladen werden, zu spielen. Ich zitiere einfach mal den entspr. Teil aus der FAQ:
Zitat2. Overlays don't seem to overlay, what can be done?
The same restarts may allow multiple overlays to load at some times, and fail at other times. If this is happening, you may tweak the delay values to get a rather hacky serialization. If using import with a folder containing .xul files, set loadOverlayDelay to a higher value (default is 500 milliseconds). If using multiple import statements, set loadOverlayDelayIncr higher (default is 1600 milliseconds - 1.6 seconds). The javascript, eg, is simply:
userChrome.loadOverlayDelayIncr = 2000;
userChrome.import("scripts/myOverlay1.xul", "UChrm");
userChrome.import("scripts/myOverlay2.xul", "UChrm");NOTE: It's better to use either the multiple import files method OR all .xul files in a folder method and not mix/match.
Der Inhalt meiner userChrome.js sieht wie folgt aus:
Wie könnte ich den nun idealerweise ergänzen? Einfach userChrome.loadOverlayDelay = 2000;
(oder userChrome.loadOverlayDelayIncr = 2000;?) in die Zeile davor setzen? Die Reihenfolge wiederum kann ich entweder über entsprechende Benennung der Dateien im Chromeordner (A-Z, 0-9) oder durch Einpflegen in die userChrome.js beeinflussen. Geht das mit dem Einpflegen auch für einzelne Skripte oder müsste ich dann wieder alle aufführen? Der knappe Code mit dem Sternchen gefällt mir so eigentlich ganz gut und ich würde es dann vielleicht erstmal ohne zusätzliche Einträge versuchen wollen..
Die Problematik bezieht sich nur auf uc.xul- und nicht uc.js-Skripte und der Code sorgt dafür, dass Overlays nacheinander, mit einer zeitlichen Verzögerung, geladen werden. Das habe ich richtig verstanden, oder? Ich weiß ehrlich gesagt garnicht so genau, was ein Overlay ist, nur dass es sich wohl um eine bestimmte Modifikation der Fx-Oberfläche handelt (mittels xul?). Daher gibt es sicher auch Add-ons, die beim Start dazwischenfunken könnten. "Welche" sind das oder konfligieren die nicht mit den userChrome-Skripten?