Bei Hostname Wechsel nen Confirm oder Alert ausgeben
Dominik
- javascript
Hi... ich habe ne Frage... ich möchte ne Meldung ausgeben, wenn ich den Hostnamen wechsel, sprich die Seite verlasse, aber keine bestimmte html-datei IN der Page verlassen...
das wollte ich dann wie folgt lösen:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function frage()
{
if(location.hostname != "xxxx") //hier würde dann der jeweilige hostname stehen... www.xxxxxx.xx
{
return(confirm('Wollen Sie wirklich unsere Seite verlassen?'))
}else{return(true);}
}
}
</script>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Unbenanntes Dokument</title>
</head>
<body onunload="frage">
</body>
</html>
leider funktioniert hier nicht wirklich viel...
kann mir jemand sagen, wo der Fehler ist?
Bin Javascript technisch seit Jahren aus der Übung.
Danke im VOrraus
hi,
ich möchte ne Meldung ausgeben, wenn ich den Hostnamen wechsel, sprich die Seite verlasse, aber keine bestimmte html-datei IN der Page verlassen...
Definiere erst mal das "Verlassen".
Beim Klick auf einen Link? Das ist machbar, darauf kannst du per onclick reagieren.
Wenn du Nutzer die Seite wechselt, in dem er über die History geht oder einfach eine neue Adresse in der Adresszeile eingibt?
Das wird schwerer, onunload ist ein Stichwort - funktioniert m.W. nicht browserübergreifend, Workarounds sind ggf. im Archiv recherchierbar, molily hat sich dazu letztlich mal wieder geäußert.
if(location.hostname != "xxxx") //hier würde dann der jeweilige hostname stehen... www.xxxxxx.xx
Das bezieht sich auf die Seite, auf der du aktuell bist.
Wenn du es nach meinem Vorschlag machst, und alle Links mit einem onclick-Handler ausstattest - dann könntest du darin überprüfen, ob der Inhalt von dessen jeweiligem href-Attribut ein relativer (und damit interner) Verweis ist, oder ob er mit einer Protokoll-Angabe beginnt - wenn ja, und der nachfolgende Hostname ist nicht deiner, dann geht der Link in externe Gefilde.
return(confirm('Wollen Sie wirklich unsere Seite verlassen?'))
Ganz schön viel Aufwand, um den Nutzer mit so einer überflüssigen Frage zu belästigen, oder?
gruß,
wahsaga
hi,
ich möchte ne Meldung ausgeben, wenn ich den Hostnamen wechsel, sprich die Seite verlasse, aber keine bestimmte html-datei IN der Page verlassen...
Definiere erst mal das "Verlassen".
Beim Klick auf einen Link? Das ist machbar, darauf kannst du per onclick reagieren.
Wenn du Nutzer die Seite wechselt, in dem er über die History geht oder einfach eine neue Adresse in der Adresszeile eingibt?
Das wird schwerer, onunload ist ein Stichwort - funktioniert m.W. nicht browserübergreifend, Workarounds sind ggf. im Archiv recherchierbar, molily hat sich dazu letztlich mal wieder geäußert.if(location.hostname != "xxxx") //hier würde dann der jeweilige hostname stehen... www.xxxxxx.xx
Das bezieht sich auf die Seite, auf der du aktuell bist.
Wenn du es nach meinem Vorschlag machst, und alle Links mit einem onclick-Handler ausstattest - dann könntest du darin überprüfen, ob der Inhalt von dessen jeweiligem href-Attribut ein relativer (und damit interner) Verweis ist, oder ob er mit einer Protokoll-Angabe beginnt - wenn ja, und der nachfolgende Hostname ist nicht deiner, dann geht der Link in externe Gefilde.
return(confirm('Wollen Sie wirklich unsere Seite verlassen?'))
Ganz schön viel Aufwand, um den Nutzer mit so einer überflüssigen Frage zu belästigen, oder?
gruß,
wahsaga
ja wie ich merke ist es viel aufwand...
also alle links ausstatten will ich nicht..
wenn ich per onclose nur die aktuelle seite und keine aus der history überprüfen kann... dann ist mein vorhaben so also unmöglich... richtig?
mmm
hab ich denn eine andere möglichkeit, zu überprüfen, ob die komplette seite verlassen wurde? ohne die links derartig zu bearbeiten?
nein, oder?
Hi,
Hi... ich habe ne Frage... ich möchte ne Meldung ausgeben, wenn ich den Hostnamen wechsel, sprich die Seite verlasse, aber keine bestimmte html-datei IN der Page verlassen...
Willst Du das nur, wenn DU das machst oder willst Du Deine Besucher mit sowas nerven?
if(location.hostname != "xxxx") //hier würde dann der jeweilige hostname stehen... www.xxxxxx.xx
Du hast aber nur die location der angezeigten Seite, nicht die der anschließend aufgerufenen und es gibt AFAIK nur in Ausnahmefällen die Möglichkeit, überhaupt an die URL der neuen Seite ranzukommen (s.u.)
leider funktioniert hier nicht wirklich viel...
Natürlich nicht.
kann mir jemand sagen, wo der Fehler ist?
M.E. im Konzept der Nachfrage an sich.
Auf welche Weise verlassen Deine Besucher Deine Webseiten?
1. per Link von Deiner Seite? Wenn Du nicht willst, daß die Besucher Deine Seite verlassen, dann gib ihnen keine Links zu anderen Seiten.
2. per Eingabe in der Adreßzeile/Aufruf von Bookmarks? Hältst Du Deine Besucher für dumm? Wenn sie ein Bookmark aufrufen oder in der Adreßzeile was eintippen, ist ihnen klar, daß sie damit Deine Seiten verlassen.
Im Fall 1. könnte man, wenn man seine Besucher wirklich total nerven will, in die betreffenden Links bei onclick ein confirm einbauen. Aber m.E. ist das Unsinn.
cu,
Andreas
Hi,
Hi... ich habe ne Frage... ich möchte ne Meldung ausgeben, wenn ich den Hostnamen wechsel, sprich die Seite verlasse, aber keine bestimmte html-datei IN der Page verlassen...
Willst Du das nur, wenn DU das machst oder willst Du Deine Besucher mit sowas nerven?
if(location.hostname != "xxxx") //hier würde dann der jeweilige hostname stehen... www.xxxxxx.xx
Du hast aber nur die location der angezeigten Seite, nicht die der anschließend aufgerufenen und es gibt AFAIK nur in Ausnahmefällen die Möglichkeit, überhaupt an die URL der neuen Seite ranzukommen (s.u.)
leider funktioniert hier nicht wirklich viel...
Natürlich nicht.
kann mir jemand sagen, wo der Fehler ist?
M.E. im Konzept der Nachfrage an sich.
Auf welche Weise verlassen Deine Besucher Deine Webseiten?
per Link von Deiner Seite? Wenn Du nicht willst, daß die Besucher Deine Seite verlassen, dann gib ihnen keine Links zu anderen Seiten.
per Eingabe in der Adreßzeile/Aufruf von Bookmarks? Hältst Du Deine Besucher für dumm? Wenn sie ein Bookmark aufrufen oder in der Adreßzeile was eintippen, ist ihnen klar, daß sie damit Deine Seiten verlassen.
Im Fall 1. könnte man, wenn man seine Besucher wirklich total nerven will, in die betreffenden Links bei onclick ein confirm einbauen. Aber m.E. ist das Unsinn.
cu,
Andreas
oh je...
es geht um die syntax und die möglichkeit ansich
ob ich wen nerve oder nicht... darum gehts gar nicht...
ich habe eine frage gestellt...
und überlege wie ich was realisiere...
wenn ich ein funktionales problem habe, welches ich erläutere, warum soll dann der rest der funktion da auch noch stehen , der überhaupt nicht interessiert...
ICH will einfach nur wissen, ob es möglich ist, zu überprüfen, ob der hostname sich geändert hat, und das durch einen onclose...
was dich nun an diesem hier vorliegenden Beispiel nervt, oder nerven könnte, steht überhaupt nicht zur debatte, da es ein beispiel ist...
nur ein beispiel...
nichts anderes...
dass hier so oft immer kritik geäußert wird, anstatt auf das problem einzugehen ...
hi,
dass hier so oft immer kritik geäußert wird, anstatt auf das problem einzugehen ...
Auf dein "Problem" wurde m.E. in hinreichender Ausführlichkeit eingegangen - sowohl Andreas als auch ich sagten dir, in welchen Fällen wir das für technisch möglich halten, und auch wie.
Dass dir darüber hinaus davon abgeraten wird, so etwas wirklich zum Nerven von Besuchern einzusetzen, ist ein Service, den du hier kostenlos dazubekommst.
gruß,
wahsaga
Hallo,
Das unload-Ereignis kannst du vergessen - damit kannst du zwar unter Umständen ein confirm-Fenster anzeigen, aber was auch immer der Benutzer dort wählt, du kannst nicht verhindern, dass die neue Adresse aufgerufen wird.
Schon besser ist das beforeunload-Ereignis. Damit kann man im Firefox und IE ein spezielles confirm-Fenster anzeigen. Wenn der Anwender dort Abbrechen wählt, wird wirklich der Seitenwechsel abgebrochen.
Aber du hast das immer noch das Problem, dass du in dem onbeforeunload-Handler nicht abfragen kannst, zu welcher Seite gerade gewechselt wird (meines Wissens).
Deshalb kannst du höchstens zentral alle Klicks auf Links (a-Elemente) abfangen und überprüfen, ob sie zu fremden Sites führen. Du musst dabei nicht jeden Link mit onclick ausstatten (und selbst das könntest du problemlos automatisieren). Click-Ereignisse steigen auf (Bubbling), sodass man sie zentral beim document-Objekt oder body-Element behandeln kann.
Schematisch:
document.onclick = handleClick;
function handleClick (evt) {
// Zugriff auf das Ereignis-Objekt: Im IE über window.event, in anderen Browser über den Parameter evt
if (!evt) {
evt = window.event;
}
// Zugriff auf das Ursprungselement, bei dem der Klick passierte
var target;
if (evt.target) {
// W3C-konform
target = evt.target;
} else if (evt.srcElement) {
// MSIE
target = evt.srcElement;
}
// Handelt es sich beim auslösenden Element um einen Link?
if (target.tagName.toLowerCase() != "a")
return;
// Gibt es eine hostname-Eigenschaft?
if (!target.hostname)
return;
// Überprüfe, ob es sich um einen externen Link handelt
if (target.hostname != location.hostname) {
// Confirm-Abfrage
var ergebnis = window.confirm("Wollen Sie wirklich unsere Seite verlassen?");
}
// Wenn die Handler-Funktion false zurückgibt, wird die Standard-Behandlung des Klicks unterdrückt, sprich, das Linkziel wird nicht annavigiert
return ergebnis;
}
(Kleines konzeptionelles Problem: Im Falle von <a><span>...</span></a> wird der Klick nicht korrekt als Klick auf ein a-Element erkannt, weil span das Ursprungselement ist, bei dem das click-Ereignis passierte. Man müsste dazu prüfen, ob das Ursprungselement in einem a-Element liegt.)
Generell wird dieses Vorgehen unter http://molily.de/css-position-fixed#javascript-alternative beschrieben - dort ist der Zweck ein etwas anderer, aber der Weg ziemlich ähnlich.
Das zentrale Vergeben von onclick-Handlern an bestimmte a-Elemente wird dort auch beschrieben: http://molily.de/css-position-fixed#javascript-kombination
Mathias