Ich möchte einen Dateidownload für einen Benutzer starten, wenn er auf einen Link klickt, aber ich habe einen onbeforeunload
-Handler, den ich beim Start des Downloads nicht aufrufen möchte. Für Downloads habe ich derzeit eine <a>
mit dem href
auf den Speicherort der Datei eingestellt, aber wenn Sie darauf klicken, wird onbeforeunload
in Chrome aufgerufen (nicht in FF).
Ich weiß, dass ich eine private Flagge setzen kann und das im onbeforeunload
Handler überprüfen kann, aber gibt es eine Möglichkeit, den Download mit Ajax zu starten? Ich möchte immer noch, dass der Benutzer die üblichen Dialoge sieht, wenn er die Datei herunterlädt (Öffnen / Speichern usw.).
Ideen?
Der beste Weg, dies zu tun, ist in der Tat, indem Sie einen iframe konstruieren und den Download von dort auslösen.
Ich habe es in Chrome, IE6 + und Firefox getestet und dieser Ansatz scheint in allen zu funktionieren.
Beispielcode:
%Vor%Dies funktioniert nur für einen einmaligen Download (da wir eine ID fest programmiert haben), wenn Sie mehrere Downloads auslösen, dann schlage ich vor, dass Sie den iframe wiederverwenden, indem Sie ihn in einer besser zugänglichen Variable speichern.
Fügen Sie dem a -Tag das download
-Attribut hinzu, das OnForeNoLoad vom Feuern zu verhindern scheint:
Aus dieser Antwort .
Ich würde vermuten, dass die Verwendung des Zielattributs auf dem Link den Trick bewirken könnte.
%Vor%Wird nicht validiert (es sei denn, es wird doctype frameset verwendet), aber es könnte funktionieren .. Es wird eine neue Registerkarte oder ein neues Fenster erstellen und dann einen Dateidownload starten (wenn der HTTP-Header es sagt), aber es könnte neue Tabs hinterlassen / Fenster geöffnet, oder es könnte sie nach dem Speichern schließen ...
Auf der anderen Seite denke ich, dass ein onbeforeunload-Handler, den Sie manchmal nicht auslösen möchten, verdächtig klingt, warum brauchen Sie das überhaupt?
Tags und Links javascript ajax download