Wie kann man in XUL dynamische Variablen einsetzen?

  • hallo zusammen,

    ich versuche mich gerade daran eine extension zu flexibilisieren.
    dazu habe ich eine konfigurationsdatei in welcher spezifische urls(rdf-ausgaben) als variablen abgespeichert sind. im endzustand sollen diese dort per "prefs.getCharPref" besetzt werden. mein problem ist jetzt, das ich es nicht hinbekomme in der xul-datei diese variablen zu übergeben.

    hier meine aktuelle problemstellung ausführlicher.
    in der datei config.js existieren folgende 2 variablen.

    Code
    var ds_url  = "http://www.url.de/api/menu";
    var rdf_url = "http://www.url.de/api/menu#root";


    in der datei myext.xul wird die config.js wie folgt eingebunden.

    Code
    <script type="application/x-javascript" src="chrome://myext/content/config.js"/>


    in einem menublock in der datei sollen die variablen aus der config.js immer aktuell ausgelesen werden. die endausgabe soll wie im folgenden aussehen.

    Code
    <menu
    	id="menu-myext"
    	position="8"
    	datasources="http://www.url.de/api/menu"
    	ref="http://www.url.de/api/menu#root"
    	class="menuitem-iconic"
          	label="&myext.menu.bookmarks;"
    	image="chrome://myext/skin/myext-icon-small.png"
    >


    wie kann ich in obigem block die parameter "datasources" und "ref" entsprechend besetzen?
    einfache versuche mit z.B. "http://%22?rdf_url%22/api/menu" klappen leider nicht. ich habe keine ahnung ob es an der syntax liegt.
    soweit ich mich jetzt belesen habe, kann das so in xul möglicherweise auch gar nicht funktionieren.

    weitere versuche per setAttribute die daten zu setzen, brachten mich bisher auch noch nicht weiter.

    Code
    <script type="application/x-javascript">
    	<![CDATA[//
    	function myInit() {
    		this.menu-myext.setAttribute("datasources", "http://www.url.de/api/menu");
    		this.menu-myext.setAttribute("ref", "http://www.url.de/api/menu#root");
    		this.menu-myext.builder.refresh();
    	}
    	window.addEventListener('load', myInit, false);
    	]]>
    	</script>


    hat jemand für mich einen tipp, wie hier syntax oder gar ganz andere vorgehensweise aussehen müsste, um ans gesteckte ziel zu kommen?

  • Zitat von Tanni

    weitere versuche per setAttribute die daten zu setzen, brachten mich bisher auch noch nicht weiter.

    Das war schon mal der richtige Ansatz. Per XUL kann man nicht auf JavaScript-Variablen zugreifen.

    Zitat
    Code
    <script type="application/x-javascript">
    	<![CDATA[//
    	function myInit() {
    		this.menu-myext.setAttribute("datasources", "http://www.url.de/api/menu");
    		this.menu-myext.setAttribute("ref", "http://www.url.de/api/menu#root");
    		this.menu-myext.builder.refresh();
    	}
    	window.addEventListener('load', myInit, false);
    	]]>
    	</script>

    versuche rebuild statt refresh. (this.menu-myext hast du ja definiert und nur für's Beispiel (wo this == window) weggelassen?)

  • danke schon mal euch beiden für die hilfe. :)
    ich versuche mich schon seit stunden an der umsetzung. das eigentliche problem beim setzen neuer attribute habe ich dummerweise jetzt erst mitbekommen. ich sehe den wald vor lauter bäumen nicht um überhaupt das gewünschte element anzusprechen. deshalb zum verständnis mal etwas mehr code von dem bookmarkmenü.

    wie genau muss ich den menu block mit der id=menu-scuttletagz ansprechen? wenn ich das hinbekomme, sollte der rest sollte dann in etwa so funktionieren.

  • das scheint alles zu passen, nur die letzte Zeile ist nicht ganz richtig:

    Code
    window.addEventListener('load', myInit, false);


    außerdem solltest du die Variablendeklarationen besser in die Funktion myInit verschieben. Globale Variablen sind nicht gut. Ohne eindeutige Prefixe in einer Erweiterung umso mehr, weil du nie wissen kannst, ob nicht eine andere Erweiterung auch eine Variable "x" oder "prefs" verwendet...

  • ich habe alle definitionen in die funktion verschoben und extra noch eindeutiger benannt. dieser teil der extension klappt jetzt genau so wie ich mir das vorgestellt habe.

    jetzt nehme ich mir das letzte problem (speichern/verändern der daten im passwortmanager) vor. vielleicht muss ich da ja auch noch mal auf deine hilfe zurück kommen. wenn ja melde ich mich gerne wieder.

    soweit vielen dank an dich, Dr.Evil. :)

  • danke dort habe ich mich schon belesen. im grunde klappt auch das speichern und ersetzen schon gut. ich muss nur noch ein paar anpassungen vornehmen, damit auch fehlerhafte urleingaben im passwortmanager (a' la http://http://http://www.url.de) valide gesetzt werden. aber das bekomme ich denke ich mal hin.

    möglicherweise aufwendiger könnte der versuch werden, die einstellungen bei laufendem firefox in der gui zu aktualisieren. mit username und passwort klappt das schon. die url wird bisher aber nur bei einem neustart des ff korrekt ausgelesen. aber damit werde ich mich in den nächsten tagen noch genauer beschäftigen.

    ich bin schon sehr zufrieden, was bisher alles klappt. :)
    je mehr man hinbekommt um so mehr neue ideen und verbesserungen fallen einem ein......

    danke nochmal. :)