Zuerst mal: Volle Zustimmung mit Whiz-zarD. Solche Meldungen sind nur dann angemessen, wenn ein Formular angezeigt wird, das der Besucher bereits (teilweise) ausgefüllt, aber noch nicht abgesendet hat. Eine allgemeine Meldung, weil jemand die Seite verläßt, ist für mich ein guter Grund, die Seite nicht wieder zu betreten. Bei halb ausgefüllten Formularen ist die Rückfrage okay, weil man möglicherweise das Absenden vergessen hat, aber ansonsten ist es schlicht ein Versuch, den Benutzer auf einer Seite festzuhalten, die ihn gerade nicht weiter interessiert. Höchst unprofessionell.

So, nachdem das aus dem Weg ist: Sehe ich das richtig, dass du eine Aktion ausführen willst, wenn jemand mit der Maus den Viewport über den oberen Rand verläßt? Das halte ich für problematisch:

  • Das Verlassen des Viewports nach oben korreliert nicht zwangsläufig mit dem Schließen des Tabs. Der Besucher könnte schlicht zu einem anderen Tab wechseln.
  • Der Besucher könte auch den Viewport in eine andere Richtung verlassen und von dort aus zur Tableiste gehen, z.B. wenn er zwischendurch in eine andere Anwendung klickt. Nicht jeder hat den Browser auf Vollbild laufen.
  • Man kann Tabs auch auf andere Arten schließen, z.B. über Tastenkombinationen oder Mausgesten.
  • Die Methode funktioniert nicht auf Mobilgeräten, weil die in der Regel andere Events erzeugen.

Du solltest statt dessen einen Event-Handler auf beforeunload binden, welcher selbstverständlich sicher stellt, dass auch mindestens ein Formularfeld ausgefüllt ist – es macht meist keinen Sinn, zu warnen, wenn das Formular gar nicht angefaßt wurde.