2010-02-09 20 views
36

Ist es möglich, Benutzer daran zu hindern, das Fenster mit der Exit-Schaltfläche [X] zu schließen? Ich stelle tatsächlich einen nahen Knopf in der Seite für die Benutzer zur Verfügung, um das Fenster zu schließen. Was im imperial ist, versuche die Benutzer zu zwingen, das Formular zu füllen und es zu senden. Ich will sie das Fenster nicht schließen, bis sie es eingereicht haben .Wie kann man verhindern, dass Benutzer ein Fenster in Javascript schließen?

Jungs Ich schätze wirklich Ihre Kommentare, ich denke nicht daran, auf einer kommerziellen Website zu hosten.Es ist eine interne Sache, wir bekommen tatsächlich alle Mitarbeiter zur Teilnahme an dieser Umfrage, die wir entworfen haben .... ich weiß es nicht Der richtige Weg, aber ich fragte mich, ob es eine Lösung für das Problem gab, das wir hier haben ...

+42

Gottseidank hinzufügen kann die Antwort ist nein. –

+13

Lieber Gott, ich hoffe, das ist nicht möglich. – FrustratedWithFormsDesigner

+6

Ich möchte nicht, dass mein Fenster versucht, mich dazu zu zwingen, irgendeine Form einzureichen. Killing den Prozess des Browsers ist eine Möglichkeit, die Sie nicht in der Lage sein, mit Javascript – Natrium

Antwort

69

Werfen Sie einen Blick auf onBeforeUnload.

Es zwingt niemanden zu bleiben, aber es wird sie fragen, ob sie wirklich gehen wollen, das ist wahrscheinlich die beste Cross-Browser-Lösung, die Sie verwalten können. (Ähnlich wie bei dieser Seite, wenn Sie versuchen, Mitte Antwort zu verlassen.)

<script language="JavaScript"> 
    window.onbeforeunload = confirmExit; 
    function confirmExit() { 
     return "You have attempted to leave this page. Are you sure?"; 
    } 
</script> 

Edit: Die meisten Browser erlauben nicht mehr eine benutzerdefinierte Nachricht für onbeforeunload.

Sehen Sie diese bug report vom 18. Februar 2016.

onbeforeunload Dialoge sind für zwei Dinge auf dem modernen Web verwendet:
1. Benutzer versehentlich den Verlust von Daten zu verhindern.
2. Scamming Benutzer.

In einem Versuch, ihre Verwendung für die letzteren zu beschränken, während die erstere nicht gestoppt wird, werden wir die von der Webseite bereitgestellte Zeichenfolge nicht anzeigen.Stattdessen werden wir eine generische Zeichenfolge verwenden.

Firefox tut dies bereits [...]

+6

Das ist jetzt nicht so schlimm! – FrustratedWithFormsDesigner

+1

Dies funktioniert nicht in Opera, da es nicht vor Unload-Ereignissen ausgelöst wird. –

+14

* schüttelt Faust * bei Opera. – Pool

0

Nun können Sie das Ereignis window.onclose verwenden und false im Event-Handler zurückgeben.

function closedWin() { 
    confirm("close ?"); 
    return false; /* which will not allow to close the window */ 
} 
if(window.addEventListener) { 
    window.addEventListener("close", closedWin, false); 
} 

window.onclose = closedWin; 

Der Code wurde von this site übernommen.

Auf der anderen Seite, wenn sie das Schließen erzwingen (durch Verwendung von Task-Manager oder etwas in diesen Zeilen) können Sie nichts dagegen tun.

+0

Ich glaube nicht, dass dies mit vielen Browsern funktioniert. –

+2

Wenn es * funktioniert *, würde ich es einen Fehler im Browser nennen. –

8

Was werden Sie tun, wenn ein Benutzer ALT + F4 trifft oder schließt es mit dem Task-Manager

Warum Sie keine Spur halten, wenn sie nicht in einem Cookie abgeschlossen haben oder die DB und wenn sie das nächste Mal besuchen bring einfach den gleichen Bildschirm zurück ...: BTW..sie sind noch nicht fertig damit, dieses Formular auszufüllen ... "

Natürlich, wenn du vor der Dotcom-Pleite wärst, würdest du dich an Pornostürme erinnern, wo, wenn du geschlossen hast 1 Fenster 15 andere würden öffnen..so ja, es gibt Code, der ein Fenster schließen wird, aber wenn Sie ALT + F4 zweimal drücken, wird das Kind und das Elternteil geschlossen (wenn es ein Popup war)

+1

Zunächst einmal sollte diese Art von "Feature" natürlich nicht missbraucht werden. Es besteht immer die Möglichkeit, dass die Aktion, die bestätigt/verzögert werden muss, kritisch und/oder zeitabhängig ist. Zum Beispiel Online-Banking. Ich überweise eine "billpay" -Transaktion für eine Zahlung, die heute initiiert werden muss. Mir wird eine Review/Bestätigungsseite angezeigt, auf der ich 'Edit',' Confirm' oder 'Cancel' auswählen kann. Ich wechsle zu einem anderen Browser Tab und schließe dann versehentlich den Browser. Ich brauche die Banking-Seite zu zeigen und lassen Sie mich wissen, dass Bestätigung erforderlich ist. Warten bis nächste Woche, wenn ich Billpay wieder öffne, ist nicht ideal. –

1

Es ist eine schlechte Übung, den Benutzer zu etwas zu zwingen, das er nicht unbedingt tun möchte. Sie können nicht wirklich verhindern, dass sie den Browser schließen.

Sie können einen ähnlichen Effekt erreichen, indem Sie eine div auf Ihrer aktuellen Webseite erstellen, um den Rest Ihrer Steuerelemente zu überlagern, so dass nur Ihr Formular zugänglich ist.

+4

Das ist auch extrem nervig. Es ist eine großartige Möglichkeit, um sicherzustellen, dass ich nicht auf eine Website zurückkomme. – FrustratedWithFormsDesigner

+1

Es ist ärgerlich, stimme ich zu. Aber es ist besser, als mich zu zwingen, meinen Browser mit einem Task-Manager zu schließen. Ich schließe nur den lästigen Tab. –

2

Dies wird ein Dialogfenster wird der Benutzer gefragt, ob er wirklich schließen oder bleiben will, mit einer Botschaft.

var message = "You have not filled out the form."; 
window.onbeforeunload = function(event) { 
    var e = e || window.event; 
    if (e) { 
     e.returnValue = message; 
    } 
    return message; 
}; 

Sie können dann ungesetzt es, bevor das Formular oder etwas anderes vorgelegt wird mit

window.onbeforeunload = null; 

Beachten Sie, dass diese extrem ärgerlich. Wenn Sie versuchen, Ihre Benutzer zu zwingen, ein Formular auszufüllen, das nicht ausfüllen möchten, dann werden Sie fehlschlagen: Sie werden einen Weg finden, um das Fenster zu schließen und nie wieder auf Ihre mittlere Website zurückzukehren.

2

Wenn Sie eine interne Umfrage verschicken, die 100% ige Teilnahme von Mitarbeitern Ihres Unternehmens erfordert, dann wäre ein besserer Weg, nur die Form der Responder ID/Benutzername/E-Mail etc. zu behalten. Alle paar Tage oder so senden Sie eine nette kleine E-Mail-Erinnerung an diejenigen in Ihrer Organisation, um die Umfrage zu vervollständigen ... Sie könnten das wahrscheinlich sogar automatisieren.

+0

Ich bin ziemlich sicher, dass es viele vorgefertigte Umfrage-Systeme, die bereits dazu fähig sind (nicht sicher, ob sie eine Menge Geld sind, aber das ist ein anderes Thema). – FrustratedWithFormsDesigner

+0

waren wir tatsächlich abhängig von diesem vorgefertigten Vermessungssystem, aber es hat sich als nutzlos erwiesen ... so dachte man an einen einfacheren Weg, es zu tun, aber trotzdem danke für Ihre Kommentare .... – manraj82

1

Wie wäre es damit?

function internalHandler(e) { 
    return "Please don't leave our page ever!"; 
} 

if (window.addEventListener) { 
    window.addEventListener('beforeunload', internalHandler, true); 
} else if (window.attachEvent) { 
    window.attachEvent('onbeforeunload', internalHandler); 
} 
6

Wenn Sie nicht möchten, dass Pop-up für alle Ereignis anzuzeigen Sie Bedingungen wie

window.onbeforeunload = confirmExit; 
    function confirmExit() { 
     if (isAnyTaskInProgress) { 
      return "Some task is in progress. Are you sure, you want to close?"; 
     } 
    } 

gut für mich Dies funktioniert

+1

Ich habe es auf IE8 getestet, Firefox und Chrome, es funktioniert gut. – Imam

Verwandte Themen