Safari - Problem mit location
André
- javascript
Moin,
Safari spinnt, wenn man via JavaScript zu einem im selben Dokument enthaltenen Anker springen will. Ich habe alle Varianten durchprobiert (self.location.hash, window.location.href, location.replace usw.), das Ergebnis ist immer das gleiche und nicht zu gebrauchen.
Es gibt m.E. nur einen Ausweg: einen Link, der auf den Anker verweist, von einem Script "anklicken" lassen. Nur: die Methode "click()" gibts für Links anscheinend nicht. Ich bin bisher soweit gekommen, den Link mit "focus()" auszuwählen, sodass er nun auch mit einem Tastendruck auslösbar wäre - aber durch was?
Eine andere Möglichkeit war, den Anker selbst mit "focus()" auszuwählen und zu hoffen, dass Safari die Auswahl von selbst in den sichtbaren Bereich des Browserfensters scrollt. Tut er aber nicht.
Mein Frage ist also: was kann ich noch tun? Gibt es irgendeinen Trick, den ich bisher übersehen habe?
André
hi,
Safari spinnt, wenn man via JavaScript zu einem im selben Dokument enthaltenen Anker springen will. Ich habe alle Varianten durchprobiert (self.location.hash, window.location.href, location.replace usw.), das Ergebnis ist immer das gleiche und nicht zu gebrauchen.
location.hash zu verändern, ist m.E. die einzig sinnvolle Vorgehensweise.
Wie sah dein Versuch aus?
Gatterzeichen mit zugewiesen?
gruß,
wahsaga
location.hash zu verändern, ist m.E. die einzig sinnvolle Vorgehensweise.
Gatterzeichen mit zugewiesen?
Alles probiert, mit und ohne (ohne Gatter ist eigentlich richtig, denn wenn man location.hash ausliest, wird der Ankername ohne Gatter zurückgegeben).
Aber egal - tätätä - ich hab eben die Lösung selber gefunden:
<form action="#anker" method="get" name="safaridummy"></form>
Um den Anker anzuspringen:
document.safaridummy.submit();
Funktioniert perfekt.
André
hi,
Alles probiert, mit und ohne (ohne Gatter ist eigentlich richtig, denn wenn man location.hash ausliest, wird der Ankername ohne Gatter zurückgegeben).
Beziehst du dich damit auf eine Eigenart des Safari?
Zitat SELFHTML:
"Beachten Sie, dass das Gatterzeichen # mit zu dem Wert gehört, den hash liefert."
Aber egal - tätätä - ich hab eben die Lösung selber gefunden:
<form action="#anker" method="get" name="safaridummy"></form>
Um den Anker anzuspringen:
document.safaridummy.submit();
Funktioniert perfekt.
Springt er nur den Anker an, ohne die Seite neu zu laden?
Reagieren andere Browser ebenso?
gruß,
wahsaga
<form action="#anker" method="get" name="safaridummy"></form>
document.safaridummy.submit();
Springt er nur den Anker an, ohne die Seite neu zu laden?
Ja.
Reagieren andere Browser ebenso?
Nein, man muss eine Browserweiche vorschalten:
if (navigator.userAgent.indexOf('Safari')==-1)
location.hash='anker';
else {
document.write('<form action="#anker" method="get" name="safaridummy"></form>');
document.safaridummy.submit();
}
Getestet unter MSIE 6 (Win XP) und unter Mac: Safari, Firefox, Netscape 7, Opera 9. Der MSIE 5 für Mac kann allerdings keins von beidem.
Wie man sieht, funktioniert es ohne Gatter - zumindest Safari hat gestern beim Testen *zwei* Gatterzeichen in der Adresszeile angezeigt, wenn ich es mit location.hash='#anker' probiert habe.
André
P.S.
document.write('<form action="#anker" method="get" name="safaridummy"></form>');
muss es heißen (Backslash in </form>)
André
Wie man sieht, funktioniert es ohne Gatter - zumindest Safari hat gestern beim Testen *zwei* Gatterzeichen in der Adresszeile angezeigt, wenn ich es mit location.hash='#anker' probiert habe.
Kommando zurück, ich habs eben nochmal mit den o.g. Mac-Browsern gestestet: das Auslesen von .hash liefert immer das voranstehende Gatterzeichen mit - also muss es beim Schreiben nach .hash auch eingegeben werden. Nur Safari zeigt in der Adresszeile dann #%23anker statt #anker.
André
Hallo,
Safari spinnt, wenn man via JavaScript zu einem im selben Dokument enthaltenen Anker springen will. Ich habe alle Varianten durchprobiert (self.location.hash, window.location.href, location.replace usw.), das Ergebnis ist immer das gleiche und nicht zu gebrauchen.
Bist du dir sicher, dass es mit location.href nicht geht?
Das Problem mit den Gatterzeichen sollte sich darüber umgehen lassen - du hängst einfach #anker an die Adresse an, sofern noch kein # in der URI vorhanden ist.
Es gibt m.E. nur einen Ausweg: einen Link, der auf den Anker verweist, von einem Script "anklicken" lassen. Nur: die Methode "click()" gibts für Links anscheinend nicht.
Einige Browser kennen diese Methode für Links, Safari nicht?
Eine andere Möglichkeit war, den Anker selbst mit "focus()" auszuwählen und zu hoffen, dass Safari die Auswahl von selbst in den sichtbaren Bereich des Browserfensters scrollt.
Siehe scrollIntoView.
Mathias