Ralf: Zugriff auf veränderliches Fenster

Hallo,

ich greife per opener Objekt auf ein Fenster zu, welches Änderungen unterworfen ist.

Da der Zugriff über eine Routine erfolgt, die per setInterval() aufgerufen wird, kann nicht vorhergesagt werden, in welchem Zustand sich das Fenster befindet.

Ich habe schon einige Prüfungen aingebaut (z.B. auf opener.document.getElementByTagName("body")[0]), aber feststellen müssen, dass ich Fehler bekomme, obwohl eine Abfrage positiv war.

Ein Beispiel:
if (opener.document.getElementById("xxx").style.height)
  opener.document.getElementById("xxx").style.height = 55px;

Für die Zuweisung habe ich die Fehlermeldung bekommen, dass das Objekt null wäre oder nicht vorhanden. Zum Zeitpunkt der IF-Abfrage muss es ja noch existiert haben.

Ich kann mir das nur so erklären, dass zwischen der IF-Abfrage und der Zuweisung eine änderung im Fenster stattgefunden hat.

Gibt es eine Möglichkeit, solche Fehler zu vermeiden?

Ralf

  1. hi,

    Ein Beispiel:
    if (opener.document.getElementById("xxx").style.height)
      opener.document.getElementById("xxx").style.height = 55px;

    Für die Zuweisung habe ich die Fehlermeldung bekommen, dass das Objekt null wäre oder nicht vorhanden. Zum Zeitpunkt der IF-Abfrage muss es ja noch existiert haben.

    Wieso muss es das?

    Nicht erst, wenn du versuchst, Otto ein Paket zu übergeben, sondern schon zu dem Zeitpunkt, wo du fragst "gibt es hier einen Otto?" kann die Antwort doch bereits lauten "Es gibt hier keinen Otto".

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Tach.

      Ein Beispiel:
      if (opener.document.getElementById("xxx").style.height)
        opener.document.getElementById("xxx").style.height = 55px;

      Für die Zuweisung habe ich die Fehlermeldung bekommen, dass das Objekt null wäre oder nicht vorhanden. Zum Zeitpunkt der IF-Abfrage muss es ja noch existiert haben.

      Wieso muss es das?

      Stimmt. Bei einer If-Abfrage auf ein Element, wo direkt auf ein Attribut des Elementes zugegriffen wird, wird nicht erst gefragt, ob das Element existiert und es wird versucht, auf das Attribut (in diesem Falle "Style") zuzugreifen. Dadurch kommt die Fehlermeldung.

      Um diesen "unschönen" Fehler erstmal auszuschalten, solltest du folgendes abfragen:

      if(opener.document.getElementById("xxx") && ...style.height)
                                               ^^

      Darauf kommt es dann an. Dadurch kommt keine Fehlermeldung.

      Konnte dir zwar bei deinem Problem nicht helfen, aber ich denke, du solltest versuchen, die funktion in das Hauptfenster zu schreiben und vom Childfenster aus immer aufrufen.

      z. B.:

      ***** Hauptfenster *****

      <span id="xxx" style="width:155px;text-align:right;">Test</span>
      <script type="text/javascript">
      function breitezuruecksetzen() {
        if(document.getElementById("xxx") && document.getElementById("xxx").style.width)
        document.getElementById("xxx").style.width="55px"
      }
      </script>

      ***** childfenster *****

      <script type="text/javascript">
      function aufruf() {
        window.opener.breitezuruecksetzen()
      }
      </script>

      Sollte es so nicht klappen, wüßte ich jetzt keine andere Möglichkeit ...

      MFG
      Griever

      1. Stimmt. Bei einer If-Abfrage auf ein Element, wo direkt auf ein Attribut des Elementes zugegriffen wird, wird nicht erst gefragt, ob das Element existiert und es wird versucht, auf das Attribut (in diesem Falle "Style") zuzugreifen. Dadurch kommt die Fehlermeldung.

        Nein - denn aus der Fehlermeldung kann ich erkennen, dass es die Zuweisung ist.

        Um diesen "unschönen" Fehler erstmal auszuschalten, solltest du folgendes abfragen:

        if(opener.document.getElementById("xxx") && ...style.height)
                                                 ^^

        Darauf kommt es dann an. Dadurch kommt keine Fehlermeldung.

        Das habe ich bereits versucht. Trotz eines positiven Ergebnisses kommt der Fehler vor.

        Konnte dir zwar bei deinem Problem nicht helfen, aber ich denke, du solltest versuchen, die funktion in das Hauptfenster zu schreiben und vom Childfenster aus immer aufrufen.

        Das macht in meinem Fall keinen Sinn, weil nach einem Seitenrefresh oder durch eine neue Seite im Hauptfenster diese nicht mehr vorhanden wäre (ich setze im Hauptfenster nur eine Variable, um festzustellen, ob es noch die gleiche Seite ist).

        Ralf

    2. Wieso muss es das?

      Weil ich davon ausgehe, dass die IF-Abfrage die Existenz des Objektes prüft.

      Nicht erst, wenn du versuchst, Otto ein Paket zu übergeben, sondern schon zu dem Zeitpunkt, wo du fragst "gibt es hier einen Otto?" kann die Antwort doch bereits lauten "Es gibt hier keinen Otto".

      Eben deshalb will ich das ja zuvor prüfen. Aus dem (hier nicht angegebenen) ELSE-Zweig weiss ich auch, dass es solche Fälle gibt (dort wird eine Meldung erzeugt).

      Wäre es vielleicht sinnvoller, für solche Fälle mit window.onerror zu arbeiten?

      Oder gleicht mit try..catch statt der IF-Abfragen?

      Ralf