M. Budde: Zugriffsverletzung - Netscape

Hi, ich bins mal wieder....

Diesmal hab ich ein schwierigeres Problem:
Bei der Benutzung einer dynamischen Navigation schmiert mir Netscape bei ungefähr einem von 30 Klicks in der Navigation ab (auf versch. Rechnern mit WinNT und Win98). WinNT meldet mir eine Zugriffsverletzung.
Das Problem steht unter www.fir.rwth-aachen.de/pht.
Die fragliche Navigation steht in der zweiten ebene (also erst mal einen der Links von "Themen" bis "Lehre / Karriere" klicken.
Das Javascript befindet sich im mittleren Navigationsframe (.../pht/nav/nav_menue.html) und etwas noch in den Frameset-Dateien für die 3. Ebene (z.B.: .../pht/service/dispgroup3.html).

Einmal mehr auf Hilfe hoffend
                                                Marcus

  1. Bei der Benutzung einer dynamischen Navigation schmiert mir Netscape bei ungefähr einem von 30 Klicks in der Navigation ab (auf versch. Rechnern mit WinNT und Win98). WinNT meldet mir eine Zugriffsverletzung.

    Ursache:
    Netscape wird instabil, wenn Links unterhalb des Mauszeigers neu geschrieben werden.
    (Dank an Henryk aus dem SELF-Chat, der mir diesen NN-Bug nannte, ohne den Tip würd ich heut noch nach der Ursache suchen)
    Im aktuellen Fall wurde der Inhalt eines Navigationslayers erneuert. Dies führte zu o.g. Effekt.

    mögliche Lösungsansätze:
    1. Für die Dauer der Aktualisierung einen weiteren Layer über den zu aktualisierenden Layer legen.
    2. Den zu aktualisierenden Layer für die Dauer der Aktualisierung auf eine Position außerhalb des Ansichtbereiches (Frame oder Fenster) setzen.

    resultierendes Verhalten des NN:
    keine Änderung, Problem besteht weiterhin.

    erweiterter Lösungsansatz:
    Die Links zusätzlich nach der aktualisierung ansprechen.
    (Anmerkung dies allein löst das Problem auch nicht, beide Lösungsansätze müssen kombiniert werden!)

    resultierendes Verhalten des NN:
    Problem reduziert, Abstürze treten nur noch in einem für den NN "normalen" Umfang auf. (deutsch: vernachlässigbar selten)

    für die Lösung relevanter Code:

    01  if (document.layers)
    02  {
    03       document.HilfslayerName.moveAbove(document.NavlayerName);
    04       document.NavlayerName.document.close();
    05       document.NavlayerName.document.open("text/html","replace");
    06       document.NavlayerName.document.writeln(htmltxt);
    07       document.NavlayerName.close();
    08       for (i = 0; i < document.NavlayerName.document.links.length; i++) void(document.NavlayerName.document.links[j]);
    09       document.HilfslayerName.moveBelow(document.NavlayerName);
    10  }

    Erläuterung:
    Zu Zeile 03: Legt einen Layer vor der Aktualisierung über den zu aktualisierenden Layer. Es ist dabei zu beachten, daß die Position und dieser natürlich mindestens die Größe entsprechend der maximalen Größe des zu aktualisierenden Layers besitzt.
    Zu Zeile 04: Eventuell in diesem Fall nicht notwendig, aber schadet nichts. Stammt noch aus der Zeit als Ursache unbekannt.
    Zu Zeile 06: In der Variable htmltxt befindet sich der Quelltext des Layers.
    Zu Zeile 08: Alle Links werden ausgelesen und somit angesprochen. Da sie aber nicht ausgeführt werden sollen, übergebe ich sie der Funktion void(). (Der Tipp stammt aus einer newsgroup)
    Zu Zeile 09: Legt den in 01 benutzten Layer wieder unter den aktualisierten Layer.

    Testumgebung:
    Netscape Navigator 4.5 und 4.7 auf Windows 98 und Windows NT 4.0

    URL:
    www.fir.rwth-aachen.de (2. Ebene) (!!! erst ab Anfang Oktober !!!)

    Verbrauchsgüter: ungezählte Zigarettenpackungen :)

    Grund für eine Antwort auf ein eigenes Posting: Der Nächste, welcher im Archiv nach diesem Problem sucht, soll nicht nur andere finden, die dieses oder ein ähnliches Problem auch haben/hatten, sondern auch einen Lösungsansatz, der eventuell weiterhilft.

    Gruß
             Marcus