Heiko: Seite neuladen und zu Anker springen

Hallo,

ich habe ein Problem: Ich möchte eine Seite (die alle 60 Sekunden neu geschrieben wird) automatisch per Javascript (z.B. alle 10 Sekunden) neu laden und immer an den zuletzt gewählten Anker springen.

Natürlich habe ich den Forumsbeitrag
http://forum.de.selfhtml.org/archiv/2002/6/t14642/ gelesen.

Das klappt auch, er (Firefox 3.6.13 bzw. IE 8) springt nach Ablauf des Timers immer wieder brav zum Anker - allerdings OHNE die Seite neu zu laden.

Also: Entweder lädt er die Seite neu und springt an den Anfang (wenn ich keinen Anker verwende) oder er springt an den Anker und lädt die Seite nicht neu. Versucht habe ich

  
window.location.href = MY_FULLURI;  
// und  
window.location.replace(MY_FULLURI);  

Habe ich etwas übersehen?

  1. Hi,

    ich habe ein Problem: Ich möchte eine Seite (die alle 60 Sekunden neu geschrieben wird) automatisch per Javascript (z.B. alle 10 Sekunden) neu laden und immer an den zuletzt gewählten Anker springen.

    ich gebe zu Protokoll, dass ich an der Sinnhaftigkeit dieses Vorgehens zweifle.

    Natürlich habe ich den Forumsbeitrag
    http://forum.de.selfhtml.org/archiv/2002/6/t14642/ gelesen.

    Uff. Das ist erstens uralt, und zweitens unwirksam.

    Das klappt auch, er (Firefox 3.6.13 bzw. IE 8) springt nach Ablauf des Timers immer wieder brav zum Anker - allerdings OHNE die Seite neu zu laden.

    Warum sollte er auch? Die Adresse ist ja noch dieselbe. Ein Neu-Laden findet nur statt, wenn sich die Adresse ändert. Falls nicht, kannst du entweder location.reload() verwenden - aber dann geht AFAIK der Anker verloren. Oder du hängst an die Seitenadresse einen URL-Parameter an, der sich bei jedem Reload ändert, aber serverseitig gar nicht ausgewertet wird. Für den Browser ist es dennoch eine neue URL, also fordert er das Dokument neu an.

    Ciao,
     Martin

    --
    Computer lösen für uns Probleme, die wir ohne sie gar nicht hätten.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. ich gebe zu Protokoll, dass ich an der Sinnhaftigkeit dieses Vorgehens zweifle.

      Es handelt sich um eine regelmässig aktualisierte Liste, die von mehreren Usern betrachtet wird. Jeden User interessieren hauptsächlich die Änderungen ab einem bestimmten Abschnitt.

      Warum sollte er auch? Die Adresse ist ja noch dieselbe.

      Hm, das Neuladen mit immer der gleichen Adresse ohne Anker hatte ja geklappt.

      location.reload() verwenden - aber dann geht AFAIK der Anker verloren.

      Vielen Dank, das funktioniert. Und der Anker geht nicht verloren, wenn er an der Adresse hängt http://server.domain/seite.html#anker

      Schönes Wochenende

      Heiko

      1. Hallo,

        ich gebe zu Protokoll, dass ich an der Sinnhaftigkeit dieses Vorgehens zweifle.
        Es handelt sich um eine regelmässig aktualisierte Liste, die von mehreren Usern betrachtet wird. Jeden User interessieren hauptsächlich die Änderungen ab einem bestimmten Abschnitt.

        ja, das ist schon okay. Aber das rechtfertigt für mich nicht das automatische Aktualisieren in kurzen Intervallen. Mich würde das sehr stören. Wenn ich die Anzeige aktualisieren möchte, dann mache ich das von Hand - die F5-Taste liegt ja ziemlich zentral.

        location.reload() verwenden - aber dann geht AFAIK der Anker verloren.
        Vielen Dank, das funktioniert. Und der Anker geht nicht verloren, wenn er an der Adresse hängt http://server.domain/seite.html#anker

        Gut - ich war mir nicht sicher. Ich bin vor einiger Zeit mal im Zusammenhang mit automatischem Reload und Ankern auf die Nase gefallen, konnte mich aber nicht mehr so genau an die Einzelheiten erinnern.

        Ciao,
         Martin

        --
        Die letzten Worte des Privatdetektivs:
        Jetzt wird es mir klar: SIE sind der Mörder!
        Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
        1. ja, das ist schon okay. Aber das rechtfertigt für mich nicht das automatische Aktualisieren in kurzen Intervallen. Mich würde das sehr stören. Wenn ich die Anzeige aktualisieren möchte, dann mache ich das von Hand - die F5-Taste liegt ja ziemlich zentral.

          Die Aktualisierung ist natürlich abschaltbar.

          Siehe auch meine Antwort an Encoder.

          Jeder Eintrag in der Liste hat seinen eigenen Anker und einen Link darauf und kann so als "persönliches Sprungziel" festgelegt werden. Auch bei einen Reload landet man immer wieder bei "seinem" Eintrag.

          ...Anker geht nicht verloren, wenn er an der Adresse hängt

          Deswegen ist das übrigens als Link gelöst: An jeder Listenzeile hängt

          <a name="anker-id" href="#anker-id">

          So wird bei Klick der Ankername in die Adresszeile übertragen und

          location.reload(true);

          springt dann brav dahin wo es soll.

          Mir als User gefällt es ganz gut :-)

          Nochmal vielen Dank Martin (auch für die schnelle Antwort)

      2. [latex]Mae  govannen![/latex]

        ich gebe zu Protokoll, dass ich an der Sinnhaftigkeit dieses Vorgehens zweifle.

        Es handelt sich um eine regelmässig aktualisierte Liste, die von mehreren Usern betrachtet wird. Jeden User interessieren hauptsächlich die Änderungen ab einem bestimmten Abschnitt.

        Hört sich sehr nach einem Einsatz von XMLHttpRequest an.

        Stur lächeln und winken, Männer!
        Kai

        --
        Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
        in Richtung "Mess up the Web".(suit)
        SelfHTML-Forum-Stylesheet
      3. Jeden User interessieren hauptsächlich die Änderungen ab einem bestimmten Abschnitt.

        Was aber nicht bedeutet dass der User gerade tatsächlich da ist, wo er durch den Anker anfangs hingesprungen ist.
        Wenn ich auf einer Seite scrolle (wovon der Anker nichts weiß!) und die ist alle 10 Sekunden wieder weg, ist die Seite für mich wertlos.
        Lade doch einfach nur den Inhalt der Liste mittels AJAX neu. Und das am besten erst nach 60 Sekunden, wenn er sich wirklich geändert hat.

        Bei deiner sehr häufigen Aktualisierung würde ich diesen Mechanismus auch noch ausschaltbar machen, denn man will ja vielleicht den Abschnitt in Ruhe ansehen, ohne dass es einem die Daten dauernd durcheinander bringt.

        1. Wenn ich auf einer Seite scrolle (wovon der Anker nichts weiß!) und die ist alle 10 Sekunden wieder weg, ist die Seite für mich wertlos.

          Das mit dem Scrollen stimmt natürlich.

          Lade doch einfach nur den Inhalt der Liste mittels AJAX neu. Und das am besten erst nach 60 Sekunden, wenn er sich wirklich geändert hat.

          Die Zeitangaben waren ja nur Beispiele. In Wirklichkeit entsteht die Liste aus einer komplexen Datenbankabfrage, bei der ich keine Möglichkeit sehe sie in kleine Teilabfragen zu splitten. Die Liste wird alle 120 Sekunden erzeugt (das dauert jeweils ca. 2 Sekunden). Ich rechne mit etwa 20-100 Usern. Daher schien mir AJAX nicht so geeignet.

          Bei deiner sehr häufigen Aktualisierung würde ich diesen Mechanismus auch noch ausschaltbar machen, denn man will ja vielleicht den Abschnitt in Ruhe ansehen, ohne dass es einem die Daten dauernd durcheinander bringt.

          Die Aktualisierung findet tatsächlich alle 60 Sekunden statt und ist natürlich einfach abschaltbar.

          1. Die Liste wird alle 120 Sekunden erzeugt (das dauert jeweils ca. 2 Sekunden). Ich rechne mit etwa 20-100 Usern. Daher schien mir AJAX nicht so geeignet.

            Warum nicht? Ich seh das grad so, entweder du lädst wie bisher immer alles, oder du lädst mit AJAX nur die Inhalte der Liste. Das wär doch weniger.

            Die Aktualisierung findet tatsächlich alle 60 Sekunden statt und ist natürlich einfach abschaltbar.

            Das könntest du ja auch auf 120 hochsetzen, wenn die Liste auf dem Server nicht im selben Tempo aktualisiert wird. Vielleicht könntest du noch (mit AJAX) abfragen in wie viel Sekunden die neuen Ergebnisse bereitstehen werden und den clientseitigen Timer dann entsprechend setzen. So dass er erst dann wieder anfragt wenn wirlich was neues zu holen ist.