Andreas Ley: Frage zum Wiki-Artikel „Ereignisverarbeitung“

problematische Seite

In "Standardaktionen unterdrücken" geht es doch eigentlich um "preventDefault", das angeführte Beispiel behandelt aber eher "onunload" – wurde da versehentlich ein falsches Beispiel einkopiert oder fehlt es mir nur an Verständnis für den Zusammenhang?

  1. problematische Seite

    Hallo Andreas,

    danke für den Hinweis. Das Wiki ist an dieser Stelle unscharf bis fehlerhaft. Zum einen vermisse ich da den Hinweis auf die cancelable Eigenschaft des Events - ein Event mit cancelable==false lässt sich durch preventDefault nicht abbrechen. Zum zweiten sind unload und beforeunload keine Events des Document-Objekts, sondern des Windows.

    Das unload-Event ist nicht oder zumindest heutzutage nicht mehr cancelable und daher ungeeignet, das Verlassen einer Seite zu verhindern.

    Wenn überhaupt, müsste man beforeunload nutzen, und stößt auf ein weiteres Problem: Firefox spielt mit, aber Chrome sagt im Log rot und deutlich:

    Blocked confirm('...') during beforeunload.
    

    Eine solche Abfrage zu bauen ist daher fahrlässig. Es ist auch kein Progressive Enhancement, das zu tun, weil die Browser dem eine Progressive Restriction entgegensetzen. Chrome hat das in früheren Versionen vermutlich nicht blockiert (keine Ahnung, habe kein Altchrom hier rumstehen) und ob der Firefox das noch lange zulässt, weiß man auch nicht. Denn eine solche Abfrage kann den User zwingen, auf der Seite zu bleiben, was einfach nur ungehörig ist. Der aktuelle Nachfolger von beforeunload-Confirms besteht deshalb in diesen "Hey warte mal" Popups, wenn man die Maus in Richtung Adresszeile bewegt.

    Ich habe den Wiki-Abschnitt überarbeitet.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. problematische Seite

      Hallo Rolf,

      da ist noch eine Kleinigkeit. Der Body hat eine onunload-Eigenschaft. Hier kann man einen Handler für das unload Event des Window hinterlegen (sagt die HTML Spec).

      Aber es bleibt dabei: unload ist nicht cancelable, und Popups in unload oder beforeunload unterliegen der Gnade des Browsers. Firefox ist gnädig, Chrome nicht.

      Rolf

      --
      sumpsi - posui - obstruxi