Jan L.: XUL: persistente Daten

Hallo allerseits,

Ich beschäftige mich seit zwei Abenden mit Mozilla-Extensions, d.h.
mit XUL und dem Mozilla-DOM, und habe es jetzt auch geschafft erste,
einfache Extensions zum Laufen zu bekommen.

Die erste Funktion, die ich in meiner Extension implementiert habe,
dient dazu, bestimmte Elemente auf einer Seite auszublenden. Das
funktioniert auch soweit schon gut. Der betreffende Menüpunk ist als
'checkbox' deklariert und das Häkchen davor taucht also auch schon
auf.

Ich weiß leider nicht, wie ich diese Eistellung beibehalte, was aber
schon so sein müsste, da ich ja nicht auf jeder neuen Seite den
Menüpunkt wieder auswählen will (sonst könnte ich ja gleich ein
Bookmarklet verwenden).

Auf xulplanet.com habe ich jetzt unter
http://xulplanet.com/tutorials/xultu/persist.html das Attribut
"persit" gefunden. Wenn ich die Beschreibung dort richtig verstehe,
kann man damit ja alles mögliche speichern. Das Testen mit "alte
Extension deinstallieren -> Browser schließen -> irgendwas versuchen
-> neue Extension packen ->  Browser starten -> neue Extension
installieren -> Browser neu starten -> Testen ... usw" ist allerdings
ziemlich lästig.

Weiß jemand von euch wie man die Einstellung für einen Menüpunkt der
in der Form

<menuitem id="hide-closed" label="gesperrte Threads ausblenden"
oncommand="hide_closed();" type="checkbox" persist="???"/>

speichern kann?

Gruß, Jan

  1. Hi,

    Ich weiß leider nicht, wie ich diese Eistellung beibehalte,

    dabei kann Dir Dein Hausarzt helfen. SCNR ;-)

    da ich ja nicht auf jeder neuen Seite den
    Menüpunkt wieder auswählen will

    Sprich: Du möchtest nicht jedes Mal die selbe manuelle, wohl aber die selbe Funktion ausführen.

    Auf xulplanet.com habe ich jetzt unter
    http://xulplanet.com/tutorials/xultu/persist.html das Attribut
    "persit" gefunden.

    Mit Persistenz hat Dein Problem nichts zu tun: Du möchtest nichts beibehalten, sondern in einem "frischen" Kontext automatisiert etwas ausführen. Also onload jeder Seite. Das persist-Attribut dient dazu, _innerhalb der Extension_ Attributwerte auch browsersessionübergreifend beizubehalten.

    Wenn ich die Beschreibung dort richtig verstehe,
    kann man damit ja alles mögliche speichern.

    Nur Attributwerte.

    Weiß jemand von euch wie man die Einstellung für einen Menüpunkt der
    in der Form [...] speichern kann?

    Gar nicht. Du musst Dir zunächst irgendwie merken, _dass_ die Funktion ausgeführt werden soll, und dann den geeigneten Zeitpunkt erwischen, dies zu tun (sprich: Dich an ein geeignetes Event anhängen). Tipp: Schau Dir den Code der Webdeveloper Toolbar an.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      Danke für deine Antwort. Jetzt habe ich wenigstens mal einen Ansatz
      und weiß, daß ich bei 'persist' in dem Zusammenhang nicht weitersuchen
      muß.

      Gar nicht. Du musst Dir zunächst irgendwie merken, _dass_ die Funktion ausgeführt werden soll,

      OK, das ist ja kein Problem. Ich kann ja den Zustand einfach in einer
      boolschen Variable speichern.

      und dann den geeigneten Zeitpunkt erwischen, dies zu tun (sprich: Dich an ein geeignetes Event anhängen).

      Da habe ich noch ein Problem. Ich habe jetzt so was versucht wie:

      var hide_closed = false;

      function init() {
        alert('test');
        if (hide_closed) hideClosed();
      }

      [...]

      window._content.onload = init; //hat nicht funktioniert
      window.onload = init; //das auch nicht

      Die Variable hide_closed hat jeweils schon den richtigen Zustand
      (getestet), die Funktion init() wird aber beim erneuten Laden der
      Seite nicht aufgerufen.

      Tipp: Schau Dir den Code der Webdeveloper Toolbar an.

      Mhmm. Die Idee hatte ich auch schon. Ich wollte aber erst mal hier
      fragen, bevor ich mich da durchwühlen muß.

      Gruß, Jan

      1. Hallo,

        Ich hab das Problem jetzt doch gelöst bekommen. Ob das die ideale
        Methode ist, weiß ich nicht, es funktioniert aber zumindest schon mal.

        Für alle, die es interessiert: statt 'window._content.onload' oder
        'window.onload', benutze ich jetzt folgendes

        [...]

        function starter() {
          window._content.addEventListener('load',init,true);
        }

        window.addEventListener('load',starter,true);

        Cheatah, deine Hilfe war zwar recht abstrakt, hat mich aber dennoch zum
        Ziel geführt. Danke dafür.

        Gruß, Jan

        1. Hallo,

          Von XUL fällt mir gare ein:
          http://www.meta-text.net/etc/firefox-in-firefox.gif (nein, das ist keine Bildmontage) ;-)

          Grüße
          Thomas

        2. Hi,

          Cheatah, deine Hilfe war zwar recht abstrakt, hat mich aber dennoch zum
          Ziel geführt. Danke dafür.

          das war der Plan ;-) Übrigens meine ich, es müsste "window.content" heißen, ohne Unterstrich - oder ist das im Firefox anders als in Mozilla?

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. Hallo,

            Übrigens meine ich, es müsste "window.content" heißen, ohne Unterstrich - oder ist das im Firefox anders als in Mozilla?

            Also ich habe da ausschließlich 'window._content' gefunden.

            http://www.mozilla.org/docs/dom/domref/dom_window_ref.html#1004028

            Gruß, Jan