LeKuchen: Im onUnload-Event window.close unterbinden

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.

  1. 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.

    --
    Javascript ist toll (Perl auch!)
  2. 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

    --
    Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
    1. 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

      1. 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.

        --
        Javascript ist toll (Perl auch!)
        1. 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

          1. 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

            --
            »No nations, no borders.«
            SELFHTML Weblog
            1. 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

              --
              Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            2. 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

              1. 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.

                --
                Javascript ist toll (Perl auch!)
                1. 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

                  --
                  Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
              2. 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

                --
                Warum nennt sich Andreas hier MudGuard?
                Schreinerei Waechter
                O o ostern ...
                Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
      2. 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

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  3. 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

    --
    Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->