Chromium-Richtlinie für JavaScript-Dialogfelder

Verlauf von JavaScript-Dialogfeldern

JavaScript wurde 1995 eingeführt und verfügte in der allerersten Version von JavaScript über Methoden für das Fensterobjekt mit den Namen alert(), confirm() und prompt().

Sie passen zwar in das damalige JavaScript-Format, ihre synchrone API ist jedoch in modernen Browsern problematisch. Da die JavaScript-Engine angehalten werden muss, bis eine Nutzerantwort eingeht, sind die JavaScript-Dialogfelder app-modal. Da die Dialogfelder app-modal sind, werden sie häufig (und leider auch leider) verwendet, um unsere Nutzer zu schädigen.

Aus diesem Grund rät das Chromium-Team dringend davon ab, JavaScript-Dialogfelder zu verwenden.

Alternativen

Es gibt viele Optionen für das Ersetzen von Dialogen.

Für alert()/confirm()/prompt() gibt es mehrere Möglichkeiten. Um Nutzer über Termine zu informieren (z.B. Kalenderwebsites), sollte die Notifications API verwendet werden. Um Nutzereingaben zu erhalten, sollte das HTML-<dialog>-Element verwendet werden. Für XSS-Proofs of Concept können Sie die console.log(document.origin) des Entwicklertools verwenden.

Beachten Sie, dass onbeforeunload bereits bereits unzuverlässig ist. Ilya Grigorik betont: „Sie können sich nicht darauf verlassen, dass pagehide-, beforeunload- und unload-Ereignisse auf mobilen Plattformen ausgelöst werden.“ Wenn Sie den Status speichern müssen, sollten Sie die Page Viewable API verwenden.

Änderungen

Die Möglichkeit einer Seite, den String onbeforeunload anzugeben, wurde in Chrome 51 entfernt. (Ab Safari 9.1 und Firefox 4 wurde sie auch in Safari entfernt.)

alert()/confirm()/prompt()-Dialogfelder sind nicht mehr modal, sondern werden beim Wechsel von Tab geschlossen. Diese Änderung wurde Anfang Mai 2017 auf allen Kanälen in Kraft getreten.

Für beforeunload-Dialogfelder ist eine Nutzergeste auf der Seite erforderlich, damit der Start in Chrome 60 angezeigt wird. (Dies wirkt sich nicht auf die Weiterleitung des beforeunload-Ereignisses aus.) Dies passt zu Chromium, das diese Änderung mit Firefox 44 vornahm.

Wenn im Vollbildmodus ein alert()/confirm()/prompt()-Dialogfeld angezeigt wird, geht der Vollbildmodus ab Chrome 61 verloren.

Der Tab von prompt() wird nicht aktiviert. Wenn prompt() über einen Hintergrund-Tab aufgerufen wird, wird der Aufruf sofort zurückgegeben und es wird kein Dialogfeld angezeigt. Diese Änderung wurde Anfang Mai 2017 auf allen Kanälen in Kraft getreten.

Der Tab von alert() wird nicht aktiviert. Wenn alert() über einen Hintergrund-Tab aufgerufen wird, wird der Aufruf sofort zurückgegeben. Der Tab ist mit einer Markierung gekennzeichnet und der Nutzer sieht das Dialogfeld, wenn er zum Tab wechselt. Diese Verhaltensänderung ist ab Chrome 64 zu beobachten.

Der Tab von confirm() wird nicht aktiviert. Wenn confirm() über einen Hintergrund-Tab aufgerufen wird, wird der Aufruf sofort zurückgegeben und es wird kein Dialogfeld angezeigt. Diese Verhaltensänderung tritt ab Chrome 69 in Kraft.

Aufgrund dieser Änderungen wird dringend empfohlen, bei Verwendung von Dialogfeldern auf Ihrer Website zu den oben genannten Alternativen zu wechseln, damit Sie davon nicht betroffen sind.