Kai: Window.close überwachen

Hallo,

ich würde gerne das Ereignis überwachen, wenn der User auf Fenster schließen klickt. Es geht hier nicht um eine normale Website, sondern darum dass wir unsere Dokumentation mit einem Apache im Hintergrund im Browser anzeigen möchten. Ich würde gerne beim Schließen der SEite den Apache herunterfahren lassen. Bisher hatten wir eigentlich einen Button hierfür und das lief im Internet Explorer ganz gut. Allerdings wollten wir jetzt browserunabhängig werden und dabei habe ich festgestellt, dass man beim Mozilla das Fenster nicht über den Button schließen kann.

Kann man das irgendwie umgehen? Ich habe bisher nichts gefunden außer dass man über about:config etwas ändert, was ich aber nicht möchte, dass die Kunden da was ändern, nicht dass sie etwas zuviel ändern und dann läuft nichts mehr

Ich dachte vielleicht kann man ja abfangen wenn der User auf das x klickt und dann die Funktion aufrufen um den Apache herunterzufahren. Geht das irgendwie? Ich habe bisher nichts gefunden außer

function Auswertung (Ereignis) {
  if (!Ereignis)
    Ereignis = window.event;
if(window.event="mouseup"){
  if(window.closed){
     document.location.href="http://localhost/cgi-bin/stop.exe";
  }
}
  //alert("Ereignis: " + Ereignis.type);
}

document.onmouseup = Auswertung;
document.onkeyup = Auswertung;

aber das geht natürlich nicht :(

Vielleicht hat ja jemand einen Tipp für mich
VIelen Dank im Voraus
LG Kai

  1. Hi,

    suchst du onbeforeunload?

    ~dave

    1. Hi,

      suchst du onbeforeunload?

      Kann man hier das OK und Abbrechen überwachen? Also dass man je nachdem was der User anklickt noch eine Funktion ausführt?

      Viele Grüße
      Kai

      1. Hi,

        suchst du onbeforeunload?
        Kann man hier […]

        _Wo_?

        ~dave

      2. Kann man hier das OK und Abbrechen überwachen? Also dass man je nachdem was der User anklickt noch eine Funktion ausführt?

        Mit beforeunload kannst du einen Dialog anzeigen lassen, in dem der Nutzer das Verlassen der Seite bestätigen muss.

        Wenn der Nutzer das Verlassen der Seite bestätigt und deine Nachricht ignoriert, so wird deine Seite entladen und du kannst nichts mehr ausführen (bzw. es ist nicht garantiert, dass Code danach noch ausgeführt wird, höchstens der Code im onclose-Handler).

        Im anderen Fall bleibt der Nutzer schlicht auf der Seite und es tut sich nichts.

        Wenn du unbedingt noch etwas ausführen willst, dann tue das im beforeunload-Handler. Z.B. indem du einen Request absendest mit XMLHttpRequest oder einfacher durch das Erzeugen eines http://de.selfhtml.org/javascript/objekte/images.htm#src@title=Image-Objektes. Der Browser fordert die Adresse dann im Hintergrund an, während sich der Nutzer mit dem Dialog beschäftigt.

        Mathias

        1. Mit beforeunload kannst du einen Dialog anzeigen lassen, in dem der Nutzer das Verlassen der Seite bestätigen muss.

          Wenn der Nutzer das Verlassen der Seite bestätigt und deine Nachricht ignoriert, so wird deine Seite entladen und du kannst nichts mehr ausführen (bzw. es ist nicht garantiert, dass Code danach noch ausgeführt wird, höchstens der Code im onclose-Handler).

          Im anderen Fall bleibt der Nutzer schlicht auf der Seite und es tut sich nichts.

          Wenn du unbedingt noch etwas ausführen willst, dann tue das im beforeunload-Handler. Z.B. indem du einen Request absendest mit XMLHttpRequest oder einfacher durch das Erzeugen eines http://de.selfhtml.org/javascript/objekte/images.htm#src@title=Image-Objektes. Der Browser fordert die Adresse dann im Hintergrund an, während sich der Nutzer mit dem Dialog beschäftigt.

          Ich möchte ja nur etwas ausführen, wenn der User die SEite wirklich verlässt und zwar den Apache noch herunterfahren. Daher möchte ich ja das Schließen der SEite "überwachen". Egal ob jetzt mit beforeunload oder ob es irgendwie anders möglich ist, eine Funktion noch auszuführen wenn der User das FEnster schließt.

  2. Hallo,

    function Auswertung (Ereignis) {
      if (!Ereignis)
        Ereignis = window.event;
    if(window.event="mouseup"){
      if(window.closed){
         document.location.href="http://localhost/cgi-bin/stop.exe";
      }
    }
      //alert("Ereignis: " + Ereignis.type);

    Dieser Code ist fehlerhaft. Mich wundert, dass er überhaupt in einem Browser funktioniert.

    Den Event-Typ kannst du so abfragen:

    if (Ereignis.[ref:self812;javascript/objekte/event.htm#type@title=type] == "mouseup") {...}

    Bitte mach dir den Unterschied eines Vergleiches mit == zu einer Wertzuweisung mit = bewusst.

    Ich verstehe auch nicht, was der Code tun soll. Wenn das Fenster geschlossen ist, wird kein JavaScript mehr ausgeführt, sodass auch keine Keyboard-Ereignisse mehr verarbeitet werden. Der Zugriff auf die closed-Eigenschaft eines Fensters ergibt höchstens von außen Sinn, also aus einem anderen Fenster-Kontext.

    Mathias

  3. Hi,

    Ich würde gerne beim Schließen der SEite den Apache herunterfahren lassen.

    wozu das? Der tut doch nicht weh, wenn er sich noch irgendwo im Hintergrund rumlümmelt und nichts zu tun hat. CPU-Zeit verbraucht er dann keine mehr, und Arbeitsspeicher auch nur sehr moderat. Aber vielleicht ist er ja noch für andere Dinge gut ...

    Also ich würde den Apachen einfach weiter laufen lassen. Ihn vom Client initiiert zu stoppen ist außerdem problematisch, weil ja kein Client wissen kann, ob er der einzige ist, der momentan mit dem Server verhandelt.

    Ciao,
     Martin

    --
    Wer im Glashaus sitzt, sollte sich nur im Dunkeln ausziehen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(