Ich entwickle eine Webanwendung, die lang laufende Ajax-Anfragen erfordert. Leider hat das Drücken von Escape während einer Anfrage unter Firefox den Nachteil, dass die Anfrage und alle Informationen, die sie gespeichert hat, gelöscht werden. Dies ist eher ärgerlich, da dies zu allen möglichen unangenehmen Komplikationen führen kann, wenn dies zur falschen Zeit geschieht. Daher möchte ich diese Funktion deaktivieren.
Mein erster Reflex war, Tastenanschläge an den Grenzen von & lt; Körper & gt; abzufangen, um sicherzustellen, dass sie das Fenster nicht erreichen würden. Zu diesem Zweck habe ich einen [keypress] -Ereignishandler nur für Ereignisse installiert, deren [keyChar] 27 ist, und er hat [stopPropagation] und [preventDefault] aufgerufen. Und für eine Weile sah es so aus, als ob das funktionierte.
Dann wurde mir klar, dass es nicht funktionieren würde, wenn der Benutzer nicht irgendwo auf das Fenster geklickt hätte, wie & lt; body & gt; Ereignishandler haben das Ereignis nie erhalten. Ich habe versucht, meinen Handler an & lt; document & gt; oder & lt; Fenster & gt; Ohne Erfolg, so dass ich schließlich einen Event-Handler [load] hinzugefügt habe und den Fokus auf & lt; body & gt; Und für eine Weile sah es so aus, als ob das funktionierte.
Dann erkannte ich, dass, wenn der Benutzer einen & lt; -Eingabe & gt; aus irgendeinem Grund erneut editierte, & lt; body & gt ;, & lt; Dokument & gt; oder & lt; Fenster & gt; Event-Handler scheint nie das Ereignis zu erhalten. Also habe ich noch einen weiteren [keypress] Handler hinzugefügt, der mit [preventDefault] auf dem & lt; input & gt; wenn der [keyChar] 27 ist.
Im Moment sieht es so aus, als würde es funktionieren. Mit der Geschichte dieses Fehlers in meiner Anwendung bin ich jedoch etwas pessimistisch.
Ich frage mich also, ob es eine bessere - und reproduzierbare - Methode gibt. Erinnern Sie sich, dass der Bug nur in FF erscheint, also bin ich bereit, hier nur einen FF-Ansatz zu wählen.
Danke
Ich wäre besorgt über andere unangenehme Komplikationen, die passieren werden, wenn die Benutzer ein Lesezeichen auswählen oder sich in der Mitte der Anfrage anderweitig entfernen. Vielleicht möchten Sie sich ansehen, warum Sie lange laufende Anfragen verwenden und sehen, ob Sie das ändern können ...
Wenn es nicht etwas ist, das Sie ändern können (oder auch wenn Sie können), sollten Sie sich ansehen, warum Ihre Anforderungen nicht fehlertolerant sind. Gibt es eine Möglichkeit, die Kommunikation in Transaktionen zu übertragen, und die neueste zurückzurollen, wenn die Verbindung unterbrochen wird?
Ich weiß, dass das ein alter Thread ist, aber es gibt einen aktiven Bug, der gegen Mozilla in Bezug auf dieses Problem angemeldet ist (dem ich auch gegenüberstehe). Weitere Informationen finden Sie Ссылка .
Ein Vorschlag von diesem Fehler ist es, die ESC-Taste zu drücken und auf Fensterebene zu drücken (wie auch von OP erwähnt):
%Vor%Dies kann jedoch unerwünschte Nebenwirkungen haben.
Tags und Links javascript ajax firefox javascript-events comet