nappy_hh: Onload-Trigger: Links zu Bookmarks?

Hi folks,

kann es sein, dass ein Sprung zu einem Bookmark innerhalb der selben htm-Datei den Onload-Handler gar nicht auslöst?
Merkwürdig dabei: wenn ich die Eigenschaften der "neuen" Datei aufrufe, steht dort das Bookmark im Pfad ... aber der Onload-Handler tut nichts ...

  1. Mal schnell ins blaue getippt, ich halte das für normal. Die Seite wird ja nur gescrollt und nicht neu geladen.

    1. Mal schnell ins blaue getippt, ich halte das für normal. Die Seite wird ja nur gescrollt und nicht neu geladen.

      Aber in der "Information" oder den "Eigenschaften" (je nach Browser) steht die neue URL mit dem neuen Anker-Namen hinter dem "#" ... ich kann selbst einen alert(document.URL) einbauen und erhalte die neue ...
      Welches Zwischending ist das denn dann? Der onload handler bleibt unberührt, aber die document.URL ändert sich?
      Wenn ich davon ausgehen könnte, dass Variablen erhalten bleiben, könnte ich ja die alte URL in eine Variable schreiben und sie mit der neuen vergleichen, aber auch das habe ich bislang noch nicht hingekriegt. Außerdem fehlt mir der Trigger: onclick auf das Dokument ist nicht machbar, weil es noch andere Links gibt. In den Link auf das Bookmark können wir auch nichts reinschreiben (zu kompliziert - die meisten Kollegen kennen sich mit HTML oder JS so gar nicht aus) ...

      Verfolge jetzt einen anderen Ansatz:
      Ginge es, den Bookmark-Links immer eine bestimmte Class oder Id, etwa "bmlink" zu geben (unaufwendig und deswegen auch von den Kollegen machbar) und dann mit einem JS die Elemente zu bearbeiten, also ihnen z.B. per JS ein "onclick" verpassen?
      Kann ich den dieselbe ID in einem Dokument mehrfach vergeben oder bin ich damit automatisch bei einer class? ...

      1. Hi,

        Aber in der "Information" oder den "Eigenschaften" (je nach Browser) steht die neue URL mit dem neuen Anker-Namen hinter dem "#" ... ich kann selbst einen alert(document.URL) einbauen und erhalte die neue ...
        Welches Zwischending ist das denn dann? Der onload handler bleibt unberührt, aber die document.URL ändert sich?

        Ja - was ist daran denn bitte so sonderbar?

        Es hat kein neues Laden stattgefunden, also feuert auch kein onload.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  2. Hi,

    kann es sein, dass ein Sprung zu einem Bookmark innerhalb der selben htm-Datei den Onload-Handler gar nicht auslöst?

    Kann es sein, dass du keinen Bookmark meinst, sondern einen Anker?

    Merkwürdig dabei: wenn ich die Eigenschaften der "neuen" Datei aufrufe, steht dort das Bookmark im Pfad ... aber der Onload-Handler tut nichts ...

    Ganz und gar nicht merkwürdig.
    Du bist lediglich in einem bereits geladenen Dokument zu einer anderen Position gesprungen.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  3. Hi!

    kann es sein, dass ein Sprung zu einem Bookmark innerhalb der selben htm-Datei den Onload-Handler gar nicht auslöst?

    Wenn du wie ChrisB schon vermutete einen Anker meinst, beziehungsweise du allgemein auf das Ändern des Hashwertes der URL reagieren willst, so schau dir Lösungen wie das jQuery history plugin an.

    Lo!

  4. Hi folks,

    kann es sein, dass ein Sprung zu einem Bookmark innerhalb der selben htm-Datei den Onload-Handler gar nicht auslöst?
    Merkwürdig dabei: wenn ich die Eigenschaften der "neuen" Datei aufrufe, steht dort das Bookmark im Pfad ... aber der Onload-Handler tut nichts ...

    Habe ein Workaround gefunden:

      
    window.onload = bodyanpassen;  
      
    function bodyanpassen ()  
    {  
       if (document.all)  
       {  
    // Aktuelle Dokument-URL parsen fuer Vergleiche mit Link-Angaben  
          var adresse = document.URL;  
          var hatmarke = adresse.split("#");  
          var gesamtpfad = hatmarke[0].split("chm::");  
          var pfadinchm = gesamtpfad[1];  
          var pfad = hatmarke[0].split("/");  
          var anzahlelemente = pfad.length;  
          var letzteselement = anzahlelemente - 1;  
          var datei = pfad[letzteselement];  
      
    // Initialisierungen  
          var aadresse = "";  
          var apfad = "";  
          var aletzteselement = 0;  
          var adatei = "";  
          var linktext = "";  
      
          var anzahllinks = document.links.length;  
          for (var zaehler=0;zaehler<anzahllinks;zaehler++)  
          {  
    // Link parsen fuer mehr Information  
             aadresse = document.links[zaehler] + "";  
             ahatmarke = aadresse.split("#");  
             apfad = ahatmarke[0].split("/");  
             aletzteselement = apfad.length - 1;  
             adatei = apfad[aletzteselement];  
       // enthaelt der Link ein Bookmark?  
             if (ahatmarke[1] != "")  
             {  
          // liegt der bookmark in diesem dokument?  
                if (datei == adatei)  
                {  
             // href ersetzen  
                   linktext = document.links[zaehler].innerHTML;  
                   zielneu = pfadinchm + document.links[zaehler].hash;  
                   neuertext = "javascript:void(window.location.href = '" + zielneu + "');location.reload();";  
                   document.links[zaehler].href = neuertext;  
                }  
             }  
          }  
       }  
    }  
    
    

    Dieser Teil des Scripts sorgt dafür, dass Links, die im selben Dokument auf einen Anker springen sollen, den onload-Handler auch triggern. Funktioniert gut. Links, die kein Bookmark anspringen bleiben unberührt, genauso wie links, die einen Bookmark in einer anderen Datei anspringen.

    Wie ihr seht, habe ich das Ganze für eine .chm-Hilfe gebaut. Der Code muss also bequemerweise auch nur für den IE passen.