2009-04-29 4 views
5

In IE und FF kann ich einen Ereignishandler an onBeforeUnload anhängen, und indem Sie eine Zeichenfolge an eine Eigenschaft des Ereignisses übergeben, wird der Benutzer ein Dialogfeld sehen, das ihn fragt, ob er mit dem "Entladen" fortfahren möchte Fenster oder Navigieren weg).Kann ich einen Bestätigungsdialog öffnen, wenn der Benutzer das Fenster in Safari/Chrome schließt?

Safari und Chrome unterstützen onBeforeUnload nicht, und onUnload scheint zu spät zu sein. Gibt es eine Möglichkeit, die gleiche Funktionalität in Safari/Chrome zu replizieren?

HINWEIS: Ich versuche nicht, den Benutzer als Geisel zu halten. Ich weiß, dass das nörgeln und nicht cool ist. Tatsächlich geht meine Seite sehr weit, um den Benutzer frei gehen zu lassen und alles an seinem Platz zu haben, wenn sie zurückkommen. Allerdings hosste ich andere Sites innerhalb von IFrames, und manchmal entschließen sie sich dazu, mich loszuwerden und den Browser zu übernehmen, was ich zu vermeiden versuche.

Danke!

+0

Beachten Sie, dass es allgemein als unhöflich zu disp Legen Sie die Seiten anderer Leute in Ihre eigenen Bilder und es gab einen großen Aufschrei, als Digg kürzlich genau das getan hat. –

+0

Ich weiß, und danke für den Vorschlag. Wir haben jedoch ein sehr anderes Ziel als Digg und (wir glauben zumindest) wir haben einen guten Grund, dies zu tun, es bietet einige echte Funktionalität. –

Antwort

7

Das funktioniert perfekt für mich sowohl in Chrome und Safari:

<html><body><p>Test</p> 
<script>window.onbeforeunload = function() { return "Sure?"; }</script> 
</body></html> 

Wenn ich versuche, das Fenster zu schließen, erhalte ich die Eingabeaufforderung.

+0

Hmmmmmmm. Das ist seltsam ... Mein Code funktionierte nicht in Safari. Vielleicht liegt es daran, dass ich Prototype's Event.observe() verwendet habe, um den Handler anzuhängen ... Wie auch immer, vielen Dank! Du hast mir das Leben so viel einfacher gemacht! –

+0

@RichieHindle Kann ich das Elternfenster zum Aktualisieren aufrufen, wenn das Kind mit dieser Methode geschlossen wird? oder kann ich das eine andere js Funktion anstelle der Bestätigung nennen lassen? – raym0nd

+0

@ raym0nd: Der "onbeforeunload" -Handler hat eine Reihe von Einschränkungen, was er tun kann. Ich bin mir nicht ganz sicher, was das ist, und sie werden wahrscheinlich zwischen Browsern variieren. Sie sollten es testen, aber ich würde bezweifeln, dass es überall, jetzt und in Zukunft funktionieren würde. – RichieHindle

2

Stackoverflow selbst verwendet onbeforeunload, und es funktioniert für mich in Safari fein:

function setConfirmUnload(a){window.onbeforeunload=a?function(){return a}:null} 
2

ich es in Chrom überprüft und es scheint zu funktionieren gut mit diesem:

<body onunload="alert('x');" onbeforeunload="test1();"> 
+0

Die ursprüngliche Frage besagt, dass Onload scheint zu spät zu sein. –

Verwandte Themen