Im onUnload-Event window.close unterbinden
LeKuchen
- javascript
Hallo zusammen,
ich möchte das schließen eines Fensters (über das x) im onUnload abfangen und den User auf eine andere Seite im selben Fenster weiterleiten.
Mit folgender Funktion fange ich das window.close ab:
function checkFormList(evt) {
evt = (evt) ? evt : ((window.event) ? window.event : "")
if (evt.clientY < 0) {
alert('Fenster wurde geschlossen.');
// (*) close-Event abbrechen
// auf andere Seite im selben Fenster weiterleiten
}
}
Wie kann ich das ausgelöste close-Event an dieser Stelle (*)unterbrechen, so dass das Fenster nicht geschlossen wird?
Um Posts vorzubeugen, die den Sinn des ganzen hinterfragen (ich kenne ja meine Pappenheimer):
-Mir ist klar, das es mit Alt+F4 umgangen werden kann
-Der Nutzer soll nicht grundsätzlich am Schließen gehindert werden - in der Anwendung wird ggf. eine Liste von Formularen angelegt, die nacheinander geöffnet/abgearbeitet werden soll.
Wie kann ich das ausgelöste close-Event an dieser Stelle (*)unterbrechen, so dass das Fenster nicht geschlossen wird?
Du glaubst nicht wirklich das das irgendwie gehen sollte?
Struppi.
Hi,
ich möchte das schließen eines Fensters (über das x) im onUnload abfangen und den User auf eine andere Seite im selben Fenster weiterleiten.
Bei manchen Browsern annst Du "bitte, bitte" machen: onBeforeUnload.
Das das nicht nur fürs "x" gilt, versteht sich aber wohl von selbst ...
Gruß, Cybaer
Hallo,
Bei manchen Browsern annst Du "bitte, bitte" machen: onBeforeUnload.
Ja, genau darüber möchte ich es machen. Aufruf der Funktion erfolgt über onBeforeUnload="function(event);"
Aber wie kann ich dann das close-Event abbrechen?
Gruss
LeKuchen
Ja, genau darüber möchte ich es machen. Aufruf der Funktion erfolgt über onBeforeUnload="function(event);"
Aber wie kann ich dann das close-Event abbrechen?
du kannst Events abbrechen entweder in dem der Event ein false zurückgibt.
Aber um du damit den Browser davon abhalten kannst das Fenster zu schliessen, weiß ich nicht, wenn ja würde ich den Browser nicht mehr benutzen.
Struppi.
Hallo,
du kannst Events abbrechen entweder in dem der Event ein false zurückgibt.
Aber um du damit den Browser davon abhalten kannst das Fenster zu schliessen, weiß ich nicht, wenn ja würde ich den Browser nicht mehr benutzen.
Ja, nach langem versuchen bin ich wirklich zu dem Ergebnis gekommen, dass es so nicht praktisch umsetzbar ist. Danke trotzdem allen, die sich mit mir den Kopf darüber zerbrochen haben!
Die größte Annäherung an eine Lösung hatte ich so umgesetzt:
<body onBeforeUnload="checkDocList();">
function checkDocList() {
if (window.event.clientY < 0) {
__callBack('closeevent', 0) // Server roundtrip
window.event.returnValue = false; // akzeptiert nur Text
}
}
Die __callBack-Funktion würde einen Postback auf die Seite machen und so ein serverseitiges Event (über Request.Params) auslösen, welches auf weitere Seiten verweisen würde...
Nur leider wird das ganze kaum in Firefox umsetzbar sein (da müsste man das event als Parameter übergeben und außerdem ist event.clientY dort nicht definiert) und desweiteren läßt sich die Usernachfrage bei event.returnValue leider nicht unterdrücken (Boolean false wird nicht akzeptiert).
Gruss
LeKuchen
Hallo,
Nur leider wird das ganze kaum in Firefox umsetzbar sein (da müsste man das event als Parameter übergeben und außerdem ist event.clientY dort nicht definiert) und desweiteren läßt sich die Usernachfrage bei event.returnValue leider nicht unterdrücken (Boolean false wird nicht akzeptiert).
Ich verstehe nicht, wieso soll es im Firefox nicht möglich sein?
Wenn du mit window.event arbeitest, unterstützt du Firefox natürlich nicht, aber du weißt anscheinend, wie du an das Eventobjekt kommst. Die Abfrage von clientX verstehe ich nicht ganz, natürlich ist beforeunload kein Mouse-Event und es würde mich nicht wundern, dass clientX nicht definiert ist.
Und natürlich lässt sich die Nachfrage nicht unterdrücken, das ist der Sinn von onbeforeunload.
Mathias
Hi,
Und natürlich lässt sich die Nachfrage nicht unterdrücken, das ist der Sinn von onbeforeunload.
Na ja, sie läßt sich nicht unterdrücken, damit man damit nicht "böse Sachen" machen kann. ;)
Der Sinn von onbeforeunload liegt darin, daß man vor dem Schließen der Seite noch in aller Ruhe Scripts ausführen kann, während bei onunload nur kurze Scripts ausgeführt werden, bevor alles aus dem Speicher fliegt ...
Gruß, Cybaer
Moin,
Ich verstehe nicht, wieso soll es im Firefox nicht möglich sein?
Wenn du mit window.event arbeitest, unterstützt du Firefox natürlich nicht, aber du weißt anscheinend, wie du an das Eventobjekt kommst.
Jep, das Eventobjekt kann ich ja im Aufruf der Funktion als Parameter übergeben. Hatte mich unklar asugedrückt. Aber ich sehe im Firefox keine Möglichkeit festzustellen, ob es sich um ein Reload der Seite oder ein Schließen handelt.
Die Abfrage von clientX verstehe ich nicht ganz, natürlich ist beforeunload kein Mouse-Event und es würde mich nicht wundern, dass clientX nicht definiert ist.
Dafür war nämlich das clientY gedacht: Im IE ist der Wert < 0 beim Schließen des Fensters. Im FF habe ich afaik keine Möglichkeit, zwischen Reload und Close des Windows zu unterscheiden.
Gruss
LeKuchen
Dafür war nämlich das clientY gedacht: Im IE ist der Wert < 0 beim Schließen des Fensters. Im FF habe ich afaik keine Möglichkeit, zwischen Reload und Close des Windows zu unterscheiden.
du musst dir wirklich mal überlegen, was passieren würde wenn das ginge, unabhängig von deinen Intentionen, das man das Browserfenster nicht mehr schliessen könnte.
JS wäre längst ausgestorben, weil es jeder, wenn er kann, es auschalten würde. Nicht umsonst sind solche Dinge auch Verantwotlich für z.b. Popupblocker. Eine Zeitlang war es mal Mode, jedesmal bei einem onunload ein neues (Werbe-)Fenster zu öffnen, was deinem Wunsch ja nahe kommt. Niemand will so etwas haben.
Struppi.
Hi,
JS wäre längst ausgestorben, weil es jeder, wenn er kann, es auschalten würde. Nicht umsonst sind solche Dinge auch Verantwotlich für z.b. Popupblocker. Eine Zeitlang war es mal Mode, jedesmal bei einem onunload ein neues (Werbe-)Fenster zu öffnen, was deinem Wunsch ja nahe kommt. Niemand will so etwas haben.
'nough said!
Gruß, Cybaer
Hi,
Dafür war nämlich das clientY gedacht: Im IE ist der Wert < 0 beim Schließen des Fensters. Im FF habe ich afaik keine Möglichkeit, zwischen Reload und Close des Windows zu unterscheiden.
Auch dann, wenn sich der Mauszeiger im Browserfenster befindet und Du das Fenster per Tastatur (z.B. Ctrl-W) schließt?
cu,
Andreas
Hi,
Aber wie kann ich dann das close-Event abbrechen?
Selbst? Gar nicht.
Der Surfer kriegt einen Dialog, in dem er gefragt wird, ob er wirklich schließen will. Und dem Dialog kannst Du auf Wunsch einen eigenen Text mitgeben (onBeforeUnload="return 'Bitte, BITTE geh nich wech! :.('">). Das ist alles, was Du kriegen kannst ...
Gruß, Cybaer
Hallo LeKuchen,
ich möchte das schließen eines Fensters (über das x) im onUnload abfangen und den User auf eine andere Seite im selben Fenster weiterleiten.
Vergiss es. Kein Browser wird sich davon abhalten lassen, das Fenster zu schließen, wenn der User es schließt. Das einzige, was du versuchen könntest, wäre, ein neues Fenster zu öffnen (window.open()).
Viele Grüße aus Freiburg,
Marian