Sichtbereich n. Neuladen der Seite wiederherstelle

Hallo,

ist es irgendwie möglich mit javascript, html, php oder sonstwas, den aktuellen sichtbereich des browserfensters nach einem click auf einen lick genauso wieder einzustellen, wie er vor dem click auf den link war?

Also die seite ist ca. 1500 px lang und hat scrollbars an der seite. durch den link ruft sich die seite selbst erneut auf. es gibt viele links mit angehängten variablen.

wäre dankbar für jede anregung.

Ich weiß zwar nicht ob ich dich richtig verstanden hab, aber dies müsste doch durch einen zurück-Button auch funktionieren.

Nee, also mann muss ja auf den link klicken um einen vorgang auszulösen. dabei ruft die seite sich allerdings selbst wieder auf, was auch so sein soll.
die seite besteht aus einer tabelle mit jeweils einem link in jeder zeile.
wenn nun jemand nach ganz unten scrollt und einen link im unteren drittel anklickt, ruft sich die seite selbst wieder auf, aber: der sichtbereich des browserfenster liegt nicht im unteren drittel wie vor dem klick, sondern ganz oben am anfang.
ich wollte jetzt lediglich eine lösung haben, der den gleichen fensterausschnitt anzeigt wie vorher.

Ich weiß zwar nicht ob ich dich richtig verstanden hab, aber
dies müsste doch durch einen zurück-Button auch funktionieren.

servus,

self.resizeTo(screen.width,screen.height)

probier das mal

grüße

Hallo,

du kannst zu sogenanten anker springen:
z.B.:

der folgende Link:
http://www.[deine-domain].com/dein_link.html#anker1

würde versuchen einen anker mit dem names „anker1“ zu finden:

Desweiteren wäre es auch möglich eine ID eines HTML objektes anzugeben:
z.b:
http://www.[deine-domain].com/dein_link.html#anker2

würde auch versuchen die ID zu finden und springt dannn dort hin:

Als Beispiel, versuche mal den folgenden Link aufzurufen:
http://www.wer-weiss-was.de/#themepages
Du wirst sehen das du automatisch nach unten gesprungen bist.

Viele Grüße,
Olaf

Also die seite ist ca. 1500 px lang und hat scrollbars an der
seite. durch den link ruft sich die seite selbst erneut auf.
es gibt viele links mit angehängten variablen.

Wäre es dann nicht Sinnvoller das, was geändert werden soll (die Parameter sollen ja was bewirken), per AJAX nachzuladen?

Jedenfalls ist es möglich, die Scrollbar-Einstellung per JavaScript auszulesen, per Parameter mitzusenden oder in einem Cookie zu speichern und auf der nächsten Seite wieder mit JavaScript auszulesen.

window.pageYOffset ist da das Stichwort: http://de.selfhtml.org/javascript/objekte/window.htm…
Auf dieser SelfHTML-Seite wird außerdem das Verhalten beim Internet Explorer erläutert.

Weitere Infos zu Cookies gibt es hier: http://de.selfhtml.org/javascript/objekte/document.h…

Allerdings verstehe ich den Sinn nicht, wo 1500 Pixel in der Höhe doch schon annähernd zum minimalen Standard was Monitore betrifft gehören.

Hallo,

du möchtest die Position der Scrollbar per Software festlegen.
Das geht so. Entweder es gibt einen Bereich auf der Zielseite und der Link lautet . Oder Du benützt Javascript und definierst einen Aufruf der Funktion ScrollTo. Die Stelle eines Objekts kann man in Pixeln ermitteln um sie ScrollTo zu übergeben. Das Script muss unbedingt bei document.onload() ausgeführt werden, weil erst dann der HTML-Teil dargestellt ist.

Hi,

am einfachsten ist es, Anker/Sprungmarken in den HTML-Code einzubauen:
text

text

Und wenn man die Seite erneut aufruft, einfach die gewünschte Stelle (Anker) in der URL dranhängen:
http://a.b.de/meineSeite.html#meinAnker, bzw.
http://a.b.de/meineSeite.html#meinAndererAnker
Siehe auch http://de.selfhtml.org/html/verweise/projektintern.h…
Gruss
Heiko

Hi,

späte Antwort, sorry - hatte einen herrlich IT-freien Urlaub…

Die einfachste Lösung wäre, den Auslöser des Problems - sprich: das Neuladen der Seite - zu eleminieren, d.h. alle Aktionen/Klicks mittels Ajax zu verarbeiten.
Dazu müsste aber die gesamte Verarbeitung umgebaut werden. Ich nehme an, das ist keine Option für dich, und du suchst nach einer Lösung, die du auf deine Architektur/Plattform „on top“ draufpappen kannst.

Im Prinzip :wink: ganz einfach:

  1. Scroll-Zustand des Fensters bei Klick ermitteln
    Das Stichwort hast du schon genannt: pageXOffset bzw. pageYOffset.
  2. Scroll-Zustand speichern
    Hier war cookies das korrekte Stichwort.
  3. Scroll-Zustand bei Neuladen der Seite wiederherstellen
    cookie-Werte mit javascript auslesen und mit der Funktion
    window.scrollTo(x, y)
    wiederherstellen.

Voraussetzungen u. Einschränkungen:
* User muss cookies und javascript aktiviert haben
* Die Seite muss nach der Ausführung des Links exakt dieselbe Darstellung haben wie vorher - sonst stimmen die Scrollwerte nicht überein. Wenn also der User ohne Neuladen einzelne Bereiche auf- und zuklappen kann, oder wenn nach der Ausführung des Links bestimmte Seitenteile wegfallen/hinzukommen/geändert sind, taugt diese Lösung nicht. In dem Fall müssten clientseitige Zustandsänderungen ebenfalls erfasst und gespeichert werden, und in Schritt 3 wieder ausgelöst werden, bevor das Scrolling wiederhergestellt wird. Wenn auch noch serverseitig verursachte Zustandsänderungen hinzukommen, geht’s mit dieser Architektur gar nicht mehr bzw. wird so kompliziert, dass doch der Umstieg auf ajax angezeigt wäre.

Die folgende Datei kannst du als test.html auf einen Webserver spielen und per http:// testen.
Sie funktioniert NICHT per Direktaufruf im lokalen Dateisystem, weil die meisten Browser bei Verwendung des file:// Protokolls Cookies ignorieren.
Wenn du die Zeile
var activateOffsetHandling = true;
auf false änderst, kannst du testen, wie die Seite ohne Lösung funktioniert. Jeder der Links besitzt andere Parameter und springt zu einem anderen Anchor.

In der jetzigen Form hat das Bsp. einen Schönheitsfehler: wenn du 2x hintereinander denselben Link klickst, greift die Scroll-Korrektur nicht. Das ist aber nur ein Artefakt, weil ich die Links zu Demozwecken mit #xyz-Sprungzielen versehen habe. Beim 2. Klick ist das für den Browser dieselbe URL, so dass kein Neuladen stattfindet, aber das Sprungziel wird trotzdem ausgeführt. Die Scroll-Korrektur ist aber an das onload Event gekoppelt.
Wenn das stört, schmeiß einfach die #xyz-Sprungmarken (im href der Links) raus.
Das gilt natürlich auch für die javascript Meldungen mit alert().

Schöne Grüße
Thomas

########################################

TEST Viewport Wiederherstellung
var activateOffsetHandling = true;
var offsetHandlingCookieParam = ‚pageOffsetParamsXY‘;
var offsetHandlingCookieTimeout = 9999; // millisecs!

function savePageOffset() {
if (! activateOffsetHandling) return;
var poX = window.pageXOffset;
var poY = window.pageYOffset;

var nowDate = new Date();
var endDate = new Date(nowDate.getTime() + offsetHandlingCookieTimeout);
document.cookie = offsetHandlingCookieParam+’=’+poX+’:’+poY + ‚; expires=‘+endDate.toGMTString();
alert(‚saved pageOffset ‚+poX+‘:‘+poY);

}

function restorePageOffset() {
if (! activateOffsetHandling || ! document.cookie) return;
// alert(„cookie:\n“+ document.cookie);
var cookieParams = document.cookie.split(’; ‚);
for (var i=0; i<cookieParams.length-1; i++) {
var param = cookieParams[i].split(‘=’);
if (param[0] == offsetHandlingCookieParam) {
var xy_params = param[1].split(’:’);
window.scrollTo(xy_params[0], xy_params[1]);
alert(‚restored pageOffset ‚+xy_params[0]+‘:‘+xy_params[1]);

break;
}
}
}

TEST Viewport Wiederherstellung

Link 1: Springt zum Seitenende

Link 2: Springt zu Link 1

Link 3: Springt zu Link 3

Link 4: Springt zu Link 5

Link 5: Springt zum Seitenanfang

########################################

Benutze AJAX. Eventuell brauchst Du dabei ein Element mit fester Höhe, das nicht neu geladen wird.