Duke: Window OnClose Event für Internet Explorer ?

Hallo,

ich möchte mit meinem IE auf des Event reagieren was ausgelöst wird wenn ein Fenster geschlossen wird. Das Body onUnload Event kann ich hier leider nicht verwenden da es auch bei einem Refresh des Fensters und nicht nur bei schließen ausgelöst wird.

Bin für jede Idee sehr dankbar.

  1. hi,

    ich möchte mit meinem IE auf des Event reagieren

    nein, das möchtest du nicht. Sondern du möchtest, daß jeder Besucher deiner Seite völlig unabhängig davon, welchen Browser und welches Betriebssystem er grade benutzt, mit einem EventHandler eine ganz bestimmte Reaktion auslöst.

    ein bisel mehr von deinem "Problem" und von deiner bisherigen Arbeit müßtest du schon kucken lassen, damit man versteht, worum es dir wirklich geht.

    Grüße

    Christoph S.

    1. hi,
      ein bisel mehr von deinem "Problem" und von deiner bisherigen Arbeit müßtest du schon kucken lassen, damit man versteht, worum es dir wirklich geht.
      Grüße
      Christoph S.

      Hallo Christoph...
      mein alter Thread ist leider schon im Archiv verschwunden, aber ich Duke scheint das selbe Problem zu haben wie ich.
      Für den MSIE hab ich folgende Lösung gefunden:

      <script language="JavaScript">
      <!--
      function onUnloadHandler(){
       if(self.VBArray){
        var e = self.event, s = self.screen;
         if(e.clientX + s.width < 0
          && e.clientY + s.height < 0
          && typeof(window.onclose) == "function"){
          window.onclose();
         };
        };
       };
       onunload =onUnloadHandler;

      function onclose(){
        window.open('delete.php?sid='+sid+'' ,'_blank', 'width=150, height=100');
       };
      //-->
      </script>

      Aber auf dem Netscape klappts nicht. Die VBArray-Abfrage hab ich rausgeschmissen und zweite If-Abfrage habe ich auch noch abgeändert, so das das Script jetzt so aussieht
      (Netscape-Versuch):

      <script language="JavaScript">
      <!--
      function onUnloadHandler(){
       if   (self.screenX + self.screen.width < 0
         && self.screenY + self.screen.height < 0
         && typeof(window.onclose) == "function"){
        window.onclose();
       };
      };
      onunload =onUnloadHandler;

      function onclose(){
       window.open('delete.php?sid='+sid+'' ,'_blank', 'width=150, height=100');
       };
      //-->
      </script>

      Aber das Script scheint unter Netscape nicht an den Funktionsaufruf ranzukommen!

      Ich bin mit meinem Latain am Ende...
      Gruss Bernd

      1. heyjo ...

        na, dann wolln wir mal:

        <script language="JavaScript">
        <!--
        function onUnloadHandler(){
        if   (self.screenX + self.screen.width < 0
           && self.screenY + self.screen.height < 0
           && typeof(window.onclose) == "function"){

        bis hierher (noch) kein Problem, abgesehen davon, daß da keine Zeilenumbrüche dazwischengehören und am Ende ein "function" steht, das nirgends in deinem geposteten Code eine Entsprechung hat

        window.onclose();
        };
        };

        hier hat dreimal je ein Semikolon Platz gefunden, das da nicht hingehört

        onunload =onUnloadHandler;

        füllst du hier eine Variable oder was soll diese unverständliche Zeile?

        function onclose(){
        window.open('delete.php?sid='+sid+'' ,'_blank', 'width=150, height=100');
        };

        das Semikolon ist wieder überflüssig, und in der Zeile davor ist nicht ganz korrekt quotiert (Anführungszeichen gesetzt) worden

        Aber das Script scheint unter Netscape nicht an den Funktionsaufruf ranzukommen!

        Netscape hat nun glücklicherweise eine Javascript-Konsole, die dir eventuelle Fehler genau auflistet. Was sagt die denn dazu?

        Ich bin mit meinem Latain am Ende...

        wir müssen das ja auch nicht in Latein diskutieren

        Christoph S.

        1. Moin Christoph...

          heyjo ...

          na, dann wolln wir mal:

          Ok, ich will auch mal :-)

          <script language="JavaScript">
          <!--
          function onUnloadHandler(){
          if   (self.screenX + self.screen.width < 0
             && self.screenY + self.screen.height < 0
             && typeof(window.onclose) == "function"){
          bis hierher (noch) kein Problem, abgesehen davon, daß da keine Zeilenumbrüche dazwischengehören und am Ende ein "function" steht, das nirgends in deinem geposteten Code eine Entsprechung hat

          Genau HIER ist das Problem! Im IE eribt die Abfrage ...clientX + screen.width irgendwas um die -9400, da das Fenster ja geschlossen wurde und somit wird die Abfrage wahr und die Funktion onclose() wird aufgerufen. Aber beim Netscape kann ich die Fenstergrösse des geschlossenen Fensters scheinbar nicht mehr ermitteln und daher komm ich nicht in die Abfrage! Und Netscape schliesst rigeros auch eine Alert-Box, mit der ich evt. screenX und screenY abfragen kann.

          window.onclose();
          };
          };
          hier hat dreimal je ein Semikolon Platz gefunden, das da nicht hingehört

          Über die Zeilenumbrüche und die Semikolons brauchen wir uns glaube ich nicht zu unterhalten. Ist klar...

          onunload =onUnloadHandler;
          füllst du hier eine Variable oder was soll diese unverständliche Zeile?

          Das ist der Funktionsaufruf beim IE auch funktioniert. Beim Netscape hab ich's mit in den Body geschrieben <body unLoad="javascript:onUnloadHandler()">

          Netscape hat nun glücklicherweise eine Javascript-Konsole, die dir eventuelle Fehler genau auflistet. Was sagt die denn dazu?

          Tja... wenn das Fenster schliesst, dann schliesst es... da ist nix mehr mit Javascriptkonsole... :-)

          Ich bin mit meinem Latain am Ende...
          wir müssen das ja auch nicht in Latein diskutieren

          Puuh... Gottseidank!!

          Christoph S.

          Es hapert einzig und alleine daran, das Nescape die "Grösse eines geschlossenen Fensters" nicht mehr erkennt. Klingt bescheuert, aber der IE macht das noch in dem Moment des Schliessens!

          Weiterhin grübelnde Grüsse...
          Bernd

          1. morgens,

            function onUnloadHandler(){
            if   (self.screenX + self.screen.width < 0
               && self.screenY + self.screen.height < 0
               && typeof(window.onclose) == "function"){
            bis hierher (noch) kein Problem, abgesehen davon, daß da keine Zeilenumbrüche dazwischengehören und am Ende ein "function" steht, das nirgends in deinem geposteten Code eine Entsprechung hat
            Genau HIER ist das Problem! Im IE eribt die Abfrage ...clientX + screen.width irgendwas um die -9400

            woher nimmst du diese Information?

            da das Fenster ja geschlossen wurde

            wurde es bisher nicht

            und somit wird die Abfrage wahr

            boolesche Werte stehen in dem Code, den du bisher gepostet hast, nicht drin

            und die Funktion onclose() wird aufgerufen

            _hier_ noch nicht

            beim Netscape kann ich die Fenstergrösse des geschlossenen Fensters scheinbar nicht mehr ermitteln

            weil es kein "geschlossenes Fenster" gibt

            onunload =onUnloadHandler;
            füllst du hier eine Variable oder was soll diese unverständliche Zeile?
            Das ist der Funktionsaufruf beim IE auch funktioniert

            schlimm genug, daß der IE sowas macht (hab ich nicht gegengeprüft)

            Beim Netscape hab ich's mit in den Body geschrieben <body unLoad="javascript:onUnloadHandler()">

            ist auch korrekt, da gehört das hin

            Netscape hat nun glücklicherweise eine Javascript-Konsole, die dir eventuelle Fehler genau auflistet. Was sagt die denn dazu?
            Tja... wenn das Fenster schliesst, dann schliesst es... da ist nix mehr mit Javascriptkonsole...

            falsch. Wenn es "Fehler" gegeben hat, werden die protokolliert, egal, ob ein Fenster noch offen ist oder nicht. Was steht da also drin?

            wir müssen das ja auch nicht in Latein diskutieren
            Puuh... Gottseidank!

            non enim arachnes sumus

            Es hapert einzig und alleine daran, das Nescape die "Grösse eines geschlossenen Fensters" nicht mehr erkennt.

            Nein. Es hapert daran, daß dein Javascript nicht die Anweisungen bereithält, die Netscape entsprechend der implementierten Logik dieser Zusatzsprache deuten kann. Und bei der Gelegenheit könntest du auch mal sagen, ob dasselbe Problem mit mozilla1 und/oder Netscape7 auftritt, und welche Netscape-Version du überhaupt einsetzt

            Christoph S.

            1. morgens,

              Dito...

              function onUnloadHandler(){
              if   (self.screenX + self.screen.width < 0
                 && self.screenY + self.screen.height < 0
                 && typeof(window.onclose) == "function"){
              bis hierher (noch) kein Problem, abgesehen davon, daß da keine Zeilenumbrüche dazwischengehören und am Ende ein "function" steht, das nirgends in deinem geposteten Code eine Entsprechung hat
              Genau HIER ist das Problem! Im IE eribt die Abfrage ...clientX + screen.width irgendwas um die -9400
              woher nimmst du diese Information?

              Ich hatte bei IE-Script nach der If-Abfrage ein Alert eingefügt und die Grösse von clientX ausgeben lassen. Bein IE bleibt die Alert-Box offen auch wenn das erzeugende Fenster geschlossen wird. Beim Netscape 4.7x leider nicht. Auf einem neueren NC hab ichs noch nicht ausprobiert.

              da das Fenster ja geschlossen wurde
              wurde es bisher nicht

              Warum wurde es nicht geschlossen?? Darum gehts doch die ganze Zeit!

              und somit wird die Abfrage wahr
              boolesche Werte stehen in dem Code, den du bisher gepostet hast, nicht drin

              Die Abfrage IF(clientX + screen.width < 0)... wird beim IE beim Fensterschliessen erfüllt und somit wahr.

              und die Funktion onclose() wird aufgerufen
              _hier_ noch nicht

              Wenn die Abfrage erfüllt wird, dann ja!

              beim Netscape kann ich die Fenstergrösse des geschlossenen Fensters scheinbar nicht mehr ermitteln
              weil es kein "geschlossenes Fenster" gibt

              Ok... die Grösse des sich schliessenden Fensters...

              Netscape hat nun glücklicherweise eine Javascript-Konsole, die dir eventuelle Fehler genau auflistet. Was sagt die denn dazu?
              Tja... wenn das Fenster schliesst, dann schliesst es... da ist nix mehr mit Javascriptkonsole...
              falsch. Wenn es "Fehler" gegeben hat, werden die protokolliert, egal, ob ein Fenster noch offen ist oder nicht. Was steht da also drin?

              Kein Fehler! Die Bedingung der Abfrage wird einfach nicht erfüllt!

              wir müssen das ja auch nicht in Latein diskutieren
              Puuh... Gottseidank!
              non enim arachnes sumus

              Grusel... und das heisst?

              Es hapert einzig und alleine daran, das Nescape die "Grösse eines geschlossenen Fensters" nicht mehr erkennt.
              Nein. Es hapert daran, daß dein Javascript nicht die Anweisungen bereithält, die Netscape entsprechend der implementierten Logik dieser Zusatzsprache deuten kann. Und bei der Gelegenheit könntest du auch mal sagen, ob dasselbe Problem mit mozilla1 und/oder Netscape7 auftritt, und welche Netscape-Version du überhaupt einsetzt

              Ich teste das Script auf einem Rechner mit IE 5.5 und auf dem anderen Rechner mit Netscape 4.75.

              Gruss Bernd

              1. Hallo,

                wenn ich das jetzt richtig verstanden habe ist die Lösung für IE das man sich an das onUnload Event hängt und dann durch Abfragen von

                e.clientX + s.width < 0
                    && e.clientY + s.height < 0
                    && typeof(window.onclose) == "function"

                rausfindet das es ein Close war und kein Refresh ?

                und wie überprüfe ich das für die die anderen Browser ?

                Was ich erreichen möchte ist folgendes:

                Ich habe ein Fenster(nennen wir wir es a) in dem man ein zweites(nennen wir es b) öffnen kann. wenn b geöffnet wird verändert sich ein linkBild bei a. wenn b wieder geschlossen wird verändert sich das LinkBild zurück.

                PROBLEM:

                Wenn ich b Refreshe passiert das gleiche als wenn ich es schließe(wegen OnUnload event also das LinkBild verändert sich zurück) und
                dann schließe ich b und das LinkBild in a ist kaput weil ich zweimal geschlossen habe und nur einmal aufgemacht.

      2. Hallo Bernd,

        Für den MSIE hab ich folgende Lösung gefunden:

        Ja, und zwar hier: http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&th=f8e8b9ba206e20ec&seekm=9imb1q%24i7urm%241%40ID-21443.news.dfncis.de#link5

        <script language="JavaScript">
        <!--
        function onUnloadHandler(){
        if(self.VBArray){
          var e = self.event, s = self.screen;
           if(e.clientX + s.width < 0
            && e.clientY + s.height < 0
            && typeof(window.onclose) == "function"){
            window.onclose();
           };
          };
        };
        onunload =onUnloadHandler;

        function onclose(){
        window.open('delete.php?sid='+sid+'' ,'_blank', 'width=150, height=100');
        };
        //-->
        </script>

        Aber auf dem Netscape klappts nicht. Die VBArray-Abfrage hab ich rausgeschmissen und zweite If-Abfrage habe ich auch noch abgeändert, so das das Script jetzt so aussieht

        Die VBArray-Abfrage ist eine Browserweiche für IE, und die hat ihren Sinn, denn die Funktion nutzt ein sehr ungewöhnliches Verhalten von IE, das sicher kein anderer Browser hat: der Event onunload hat eine Eigenschaft clientX, die hohe negative Werte liefert, wenn das Fenster geschlossen wird. event.clientX(Y) sind ja die Mauskoordinaten bei Maus-Events, die bei onunload über Alt+F4 eigentlich gar keinen Sinn machen, im IE aber trotzdem mit diesen für Koordinaten viel zu hohen Werten belegt sind.

        Ich verstehe nicht, warum das so ist, wäre aber völlig überrascht, wenn sich dieses Verhalten auch noch bei einem anderen Browsern finden würde. Hinzu kommt, dass mehrere Browser Bugs bei onunload haben. NS4 und Mozilla feuern den Event nur beim Laden einer neuen Seite, nicht beim Schließen des Fensters (wie Arne in dem alten Thread ja auch schon vermutet hatte). NS6 hat die Macke erstaunlicherweise aber nicht.

        He, nun sehe ich gerade, dass du crosspostest:
        13.7. 3:16 http://forum.de.selfhtml.org/archiv/2002/7/16948/
        13.7. 4:16 http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&th=a48ef4d2547f524b&seekm=agqhp6%24idj%2406%241%40news.t-online.com#link1
        Vielleicht bastelst du auch noch mit Duke an der selben Seite?

        Grüße, Stefan

        1. Hallo Bernd,

          Hallo Arne...

          Für den MSIE hab ich folgende Lösung gefunden:

          Ja, und zwar hier: http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&th=f8e8b9ba206e20ec&seekm=9imb1q%24i7urm%241%40ID-21443.news.dfncis.de#link5

          Danke, genau da hatte ich das her! Hatte dieses Posting leider nicht mehr wiedergefunden gehabt.

          »»

          [Script]

          »»

          Aber auf dem Netscape klappts nicht. Die VBArray-Abfrage hab ich rausgeschmissen und zweite If-Abfrage habe ich auch noch abgeändert, so das das Script jetzt so aussieht

          Die VBArray-Abfrage ist eine Browserweiche für IE, und die hat ihren Sinn, denn die Funktion nutzt ein sehr ungewöhnliches Verhalten von IE, das sicher kein anderer Browser hat: der Event onunload hat eine Eigenschaft clientX, die hohe negative Werte liefert, wenn das Fenster geschlossen wird. event.clientX(Y) sind ja die Mauskoordinaten bei Maus-Events, die bei onunload über Alt+F4 eigentlich gar keinen Sinn machen, im IE aber trotzdem mit diesen für Koordinaten viel zu hohen Werten belegt sind.

          Ich verstehe nicht, warum das so ist, wäre aber völlig überrascht, wenn sich dieses Verhalten auch noch bei einem anderen Browsern finden würde. Hinzu kommt, dass mehrere Browser Bugs bei onunload haben. NS4 und Mozilla feuern den Event nur beim Laden einer neuen Seite, nicht beim Schließen des Fensters (wie Arne in dem alten Thread ja auch schon vermutet hatte). NS6 hat die Macke erstaunlicherweise aber nicht.

          Aha... danke für die Infos. Es hat also wenig Sinn dann noch weiter nach einer Lösung für den NS zu suchen? Ist eigentlich schade, denn in meinen Augen, ist es durchaus nützlich zu erkennen und darauf reagieren zu können, wenn ein User eine Seite über Alt-F4 oder X verlässt.

          He, nun sehe ich gerade, dass du crosspostest:
          13.7. 3:16 http://forum.de.selfhtml.org/archiv/2002/7/16948/
          13.7. 4:16 http://groups.google.de/groups?hl=de&lr=&ie=UTF-8&th=a48ef4d2547f524b&seekm=agqhp6%24idj%2406%241%40news.t-online.com#link1
          Vielleicht bastelst du auch noch mit Duke an der selben Seite?

          Mein erstes Posting ist ja leider schon nach 2 Tagen ins Archiv verschwunden, da kams mir natürlich gelegen, das Duke das Thema auch aufgriff. Aber an der selben Seite basteln wir nicht. (Hoffe zumindest, das er nicht zeitgleich ein ähnliches Projekt ins Netz stellen will. Obwohl... Konkurrenz belebt das Geschäft :-) )

          Ist es nicht gerne gesehen, wenn ich mich gleichzeitig in einem Forum und in einer Newsgroup nach einer Lösung für mein Problem erkundige?

          Grüße, Stefan

          Gruss, Bernd

          1. Hallo Bernd,

            Danke, genau da hatte ich das her! Hatte dieses Posting leider nicht mehr wiedergefunden gehabt.

            Google hilft. Gerade die Suche in den Groups beeindruckt mich immer wieder: rasend schnell, und mit aussagekräftigen Suchbegriffen kommt man oft direkt ans Ziel.

            Es hat also wenig Sinn dann noch weiter nach einer Lösung für den NS zu suchen?

            Auf Basis der IE-Lösung ist wohl nichts zu machen, und aufgrund der Bugs bei onunload wohl auch nicht für NS4 und Mozilla. Wäre das Fenster ein Popup, hättest du natürlich noch weitere Möglichkeiten.

            Vielleicht bastelst du auch noch mit Duke an der selben Seite?

            Mein erstes Posting ist ja leider schon nach 2 Tagen ins Archiv verschwunden, da kams mir natürlich gelegen, das Duke das Thema auch aufgriff. Aber an der selben Seite basteln wir nicht.

            Ich meinte ja eigentlich nicht nur die selbe Seite, sondern auch den selben Rechner und die selbe Nase davor. Aber das war natürlich eine ganz böswillige Unterstellung. :-)

            Ist es nicht gerne gesehen, wenn ich mich gleichzeitig in einem Forum und in einer Newsgroup nach einer Lösung für mein Problem erkundige?

            Stell dir halt vor, du nimmst dir die Zeit, auf 'ne Frage zu antworten, und stellst dann fest, dass der Fragesteller zur Maximierung der Antwort-Ausbeute auch noch in fünf anderen Foren gepostet hat, und die Frage in zwei der Foren schon erschöpfend beantwortet war, als du dir die Zeit genommen hast.

            Grüße, Stefan

            1. Hallo Bernd,

              Hallo Stefan...

              Google hilft. Gerade die Suche in den Groups beeindruckt mich immer wieder: rasend schnell, und mit aussagekräftigen Suchbegriffen kommt man oft direkt ans Ziel.

              Ich hatts ja einmal bei Google gefunden gehabt, aber als ich nochmal wegen der Addi gesucht hatte, hab ichs nicht mehr gefunden gehabt. Wohl andere Suchbegriffe genommen.

              Auf Basis der IE-Lösung ist wohl nichts zu machen, und aufgrund der Bugs bei onunload wohl auch nicht für NS4 und Mozilla. Wäre das Fenster ein Popup, hättest du natürlich noch weitere Möglichkeiten.

              Ich werd mir mal die verschiedensten Browser Versionen besorgen, um zu sehen, wo das Script wie funkioniert. Bei denen wo's mit "onClose" nicht klappt, werd ich dann wohl doch zur Session/Cookie-Variante greifen müssen und die User zur saubersten Abmelde-Variante erziehen - dem Abmelde Button. :-)

              Ich meinte ja eigentlich nicht nur die selbe Seite, sondern auch den selben Rechner und die selbe Nase davor. Aber das war natürlich eine ganz böswillige Unterstellung. :-)

              Welch böswillige Unterstellung!! In die Luft geh... :-)

              Stell dir halt vor, du nimmst dir die Zeit, auf 'ne Frage zu antworten, und stellst dann fest, dass der Fragesteller zur Maximierung der Antwort-Ausbeute auch noch in fünf anderen Foren gepostet hat, und die Frage in zwei der Foren schon erschöpfend beantwortet war, als du dir die Zeit genommen hast.

              Ich denke/dachte mit, das nicht automatisch jeder Forumsbenutzer auch in den Newsgroups hantiert und umgekehrt. Ich hab Newsgroups und Foren auch noch nicht allzu häufig genutzt. Und meine Erfahrungen in Foren war bisher nicht so überwältigend. Die Antworten tendierten gegen Null. Hatte wohl die falschen Foren besucht. Und hier in dem Forum ist die "Haltwertszeit" eines Threads, wie ich finde, recht kurz, bevor ein Artikel ins Archiv verschwindet. Und wenn in NG und Forum 2 verschiedene Lösungen zu einem Problem gefunden werden würden, wär das doch toll. Ich denke, das es zu vielen Problemen auch mehrere Lösungen geben wird. Dadurch kann man nur dazulernen!

              Grüße, Stefan

              Und nu 'ne gute Nacht...
              Bernd

  2. Hallo,

    ich möchte mit meinem IE auf des Event reagieren was ausgelöst wird wenn ein Fenster geschlossen wird. Das Body onUnload Event kann ich hier leider nicht verwenden da es auch bei einem Refresh des Fensters und nicht nur bei schließen ausgelöst wird.

    Bin für jede Idee sehr dankbar.

    Hallo Duke...

    Schau mal hier:

    <a href="http://forum.de.selfhtml.org/archiv/2002/7/16948/">http://forum.de.selfhtml.org/archiv/2002/7/16948/</a>

    Ich arbeite an dem gleichen Problem. Für den IE hab ichs hinbekommen, aber nicht für den Netscape...

    Gruss...
    Bernd