onbeforeunload Aktion in Abhängigkeit von der neuen URL
Stefan
- javascript
Hallo zusammen!
Ich suche nach einer Möglichkeit innerhalb eines Eventhandlers für onbeforeunload abzufragen, zu welcher URL gewechselt werden soll.
Hintergrund: Ich habe einen Online-Shop, bei dem der Warenkorb erhalten bleibt, solange man sich im Shop bewegt. Verlässt man den Shop, z.b. um auf andere Teile der Seite zu kommen, wird der Warenkorb geleert. Damit dem Benutzer das nicht versehentlich passiert, möchte ich ihn vorher fragen, wenn er die Shopseiten verlässt.
Hat jemand eine Idee?
Schöne Grüße,
Stefan
Hi,
Ich suche nach einer Möglichkeit innerhalb eines Eventhandlers für onbeforeunload abzufragen, zu welcher URL gewechselt werden soll.
installiere bei Deinen Besuchern eine Webcam, die Dich darüber informiert.
Hintergrund: Ich habe einen Online-Shop, bei dem der Warenkorb erhalten bleibt, solange man sich im Shop bewegt. Verlässt man den Shop, z.b. um auf andere Teile der Seite zu kommen, wird der Warenkorb geleert.
Das ist absolut unmöglich, da es in HTTP so etwas wie "verlassen" nicht gibt.
Cheatah
Hallo,
Ich suche nach einer Möglichkeit innerhalb eines Eventhandlers für onbeforeunload abzufragen, zu welcher URL gewechselt werden soll.
Gibt es nicht.
Da musst du das Konzept ändern: Bei einem Klick auf einen externen Link muss onbeforeunload gesetzt werden, vorher nicht. (Oder umgekehrt: Bei internen Links muss es gelöscht werden.) Oder eine globale Variable setzen, in der gespeichert wird, ob gerade ein externer Link geklickt wurde. (Vielleicht gibts auch noch bessere Ansätze.)
Hintergrund: Ich habe einen Online-Shop, bei dem der Warenkorb erhalten bleibt, solange man sich im Shop bewegt. Verlässt man den Shop, z.b. um auf andere Teile der Seite zu kommen, wird der Warenkorb geleert.
Warum? Session-ID geht flöten?
Mathias
Hallo,
Oder eine globale Variable setzen, in der gespeichert wird, ob gerade ein externer Link geklickt wurde.
Das sähe dann etwa so aus:
<script>
[code lang=javascript]function onbeforeunload () {
if (window.externerLink) {
window.externerLink = false;
return "Wirklich verlassen?";
}
};
function handleClick (e) {
e = e || window.event;
var target = e.target || e.srcElement;
if (target.nodeName.toLowerCase() == "a" && target.href.match(/^http:\/\/nichtshop/)) {
window.externerLink = true;
} else {
window.externerLink = false;
}
}
function onload () {
document.body.onclick = handleClick;
}
</script>
<p>
<a href="./shop">shop</a>
<a href="http://nichtshop.example.org">nicht shop</a>
</p>[/code]
Alle click-Ereignisse werden zentral beim body-Element überwacht. Durch das Event-Bubbling kommen alle click-Ereignisse dort vorbei und können behandelt werden. Es wird abgefragt, bei welchem Element das Ereignis passiert ist (Event-Target), ob es sich um einen Link handelt und ob es sich um einen externen Link handelt. Diese Prüfung mit einem regulären Ausdruck ist hier nur angedeutet, das müsste man an die örtlichen Gegebenheiten anpassen (der reguläre Ausdruck bedeutet: Link-URI beginnt mit der Zeichenkette »http://nichtshop«). Wenn es sich um einen externen Link handelt, wird eine globale Variable gesetzt. Die wird im anschließend gefeuerten beforeunload-Handler abgefragt. Nur wenn vorher also ein externer Link geklickt wurde, wird ein Meldungsfenster ausgegeben.
Jetzt nur zur Verdeutlichung des Konzeptes.
Mathias
Hi,
Alle click-Ereignisse werden zentral beim body-Element überwacht. Durch das Event-Bubbling kommen alle click-Ereignisse dort vorbei und können behandelt werden. Es wird abgefragt, bei welchem Element das Ereignis passiert ist (Event-Target), ob es sich um einen Link handelt und ob es sich um einen externen Link handelt. Diese Prüfung mit einem regulären Ausdruck ist hier nur angedeutet, das müsste man an die örtlichen Gegebenheiten anpassen (der reguläre Ausdruck bedeutet: Link-URI beginnt mit der Zeichenkette »http://nichtshop«). Wenn es sich um einen externen Link handelt, wird eine globale Variable gesetzt. Die wird im anschließend gefeuerten beforeunload-Handler abgefragt. Nur wenn vorher also ein externer Link geklickt wurde, wird ein Meldungsfenster ausgegeben.
Das hilft aber nicht, wenn die Seite durch Eintippen einer URL in die Adreßzeile oder durch Aufruf eines Bookmarks/Favoriten oder ähnlichem verlassen wird.
cu,
Andreas
Hallo,
Das hilft aber nicht, wenn die Seite durch Eintippen einer URL in die Adreßzeile oder durch Aufruf eines Bookmarks/Favoriten oder ähnlichem verlassen wird.
Ja, klar - bei Paranoia kann man die Sache natürlich umkehren und von Blacklist auf Whitelist umschalten.
Mathias
Hi,
Ich suche nach einer Möglichkeit innerhalb eines Eventhandlers für onbeforeunload abzufragen, zu welcher URL gewechselt werden soll.
Es geht Dich schlicht nichts an, zu welcher Seite ein Benutzer sich hinbewegt, wenn er Deine Seite nicht mehr sehen will.
Daher gibt es diese Möglichkeit _natürlich_ nicht.
Hintergrund: Ich habe einen Online-Shop, bei dem der Warenkorb erhalten bleibt, solange man sich im Shop bewegt. Verlässt man den Shop, z.b. um auf andere Teile der Seite zu kommen, wird der Warenkorb geleert. Damit dem Benutzer das nicht versehentlich passiert,
wäre es sinnvoll, den Warenkorb nicht zu leeren, nur weil eine andere Seite aufgerufen wird.
cu,
Andreas
Hallo,
Verlässt man den Shop, z.b. um auf andere Teile der Seite zu kommen, wird der Warenkorb geleert.
dann lass den Unsinn doch einfach bleiben.
Ciao,
Martin