rhapsody: Problem durch nicht fertig geladenes Fenster?

Hallo,

bin ein absoluter Neuling auf dem JS Gebiet. Ich will eigentlich weiter nichts als dass in einem Objekt Title & URL eines neu geöffneten fensters gespeichert werden.

Die Funktion "Memorize(tempLink)" wird über ein oncommand-befehl in einem menuitem eines *.xul dokuments aufgerufen. Nun habe ich das Problem, dass die Codezeile "alert(Entry["title"] + "    " + Entry["url"]);" nur den richtigen Titel & URL ausgeibt, wenn ich zuvor irgendeinen anderen alert aufrufe (siehe: "alert("anything");"). Wenn ich alert("anything"); nicht aufrufe, so wird für den Titel ein leerer String ausgegeben (URL funktioniert trotzdem, da diese ja übergeben wird).

Ich denke, dass es etwas damit zu tun hat, dass die Seite noch nicht vollständig geladen ist. Oder? Ich habe auch schon versucht einen onload-event handler einzubauen, aber danach ist gar nichts mehr passiert (es sah so aus, als hätte er die Funktion, die nach dem laden ausgeführt werden soll, gar nicht ausgeführt). Da ich mich mit JS noch nicht so auskenne, kann ich jetzt nicht sagen, ob ich den event handler richtig integriert hatte...

hier ist die Funktion:

function Memorize(tempLink)
{

var EntryWindow = window.open(tempLink,"width=600,height=600");
    EntryWindow.id = "tempWindow";
    alert("anything");
    var aEntryList = new Array();
    var Entry = new Object();

Entry["title"] = EntryWindow.document.title;
    Entry["url"] = tempLink;

alert(Entry["title"] + "    " + Entry["url"]);
    aEntryList.unshift(Entry);
}

Ich hoffe ihr könnt mir helfen.
Grüße,
Rhapsody

  1. Ich denke, dass es etwas damit zu tun hat, dass die Seite noch nicht vollständig geladen ist. Oder? Ich habe auch schon versucht einen onload-event handler einzubauen, aber danach ist gar nichts mehr passiert (es sah so aus, als hätte er die Funktion, die nach dem laden ausgeführt werden soll, gar nicht ausgeführt). Da ich mich mit JS noch nicht so auskenne, kann ich jetzt nicht sagen, ob ich den event handler richtig integriert hatte...

    Es gibt keine 100% zuverlässige Lösung für dein Problem (u.U. steckt in den tiefen der Möglichkeiten der Mozillabrowser etwas, aber ich kenne nichts). Der einzige Weg dürfte sein, wenn du in intervalen prüfst ob das Dokument fertig geladen ist oder die von dir gewünschte Eigenschaft zu Verfügung steht.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Es gibt keine 100% zuverlässige Lösung für dein Problem (u.U. steckt in den tiefen der Möglichkeiten der Mozillabrowser etwas, aber ich kenne nichts). Der einzige Weg dürfte sein, wenn du in intervalen prüfst ob das Dokument fertig geladen ist oder die von dir gewünschte Eigenschaft zu Verfügung steht.

      Hallo Struppi,

      auf die Idee hätte ich ja auch selbst schon Mal kommen können ;)
      Aber jetzt weiß ich nicht so recht wie ich das umsetzen kann. Mir war gerade nur ne ganz dumme Lösung eingefallen (die noch nicht einmal funktioniert hat). Ich lass ihn sich einfach so lang in einer Schleife drehen, bis es die Eigenschaft gibt. Funktioniert aber nicht. Spannend ist, dass mich FF irgendwann fragt ob ich das Script weiter ausführen möchte und wenn ich das mit "ja" bestätige, dann ist die Eigenschaft plötzlich vorhanden.

      so was komisches hattes ich versucht:

      while (EntryWindow.document.title=="")
      {
      }

      Kannst du mir vielleicht nochmal weiterhelfen?

      Grüße,
      Rhapsody

      1. hi,

        Spannend ist, dass mich FF irgendwann fragt ob ich das Script weiter ausführen möchte und wenn ich das mit "ja" bestätige, dann ist die Eigenschaft plötzlich vorhanden.

        so was komisches hattes ich versucht:

        while (EntryWindow.document.title=="")
        {
        }

        Zum Glück fragt dich der FF, ob du diesen Unfug noch länger dulden willst - denn damit blockierst du jegliche weitere Scriptausführung bis zum Abbruch der Schleife.

        Kannst du mir vielleicht nochmal weiterhelfen?

        Hat Struppi doch bereits: Du sollst in _Intervallen_ prüfen - nicht in einer Hardcore-Performance-Killer-Loop.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. auf die Idee hätte ich ja auch selbst schon Mal kommen können ;)
        Aber jetzt weiß ich nicht so recht wie ich das umsetzen kann. Mir war gerade nur ne ganz dumme Lösung eingefallen (die noch nicht einmal funktioniert hat). Ich lass ihn sich einfach so lang in einer Schleife drehen, bis es die Eigenschaft gibt. Funktioniert aber nicht. Spannend ist, dass mich FF irgendwann fragt ob ich das Script weiter ausführen möchte und wenn ich das mit "ja" bestätige, dann ist die Eigenschaft plötzlich vorhanden.

        Das geht nicht. Daher mein Hinweis mit dem interval, du musst dafür window.setInterval() nutzen

        Struppi.

        --
        Javascript ist toll (Perl auch!)