Laden Sie die Binärdatei herunter, ohne OnbeforeUnload auszulösen

8

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?

    
psychotik 16.03.2010, 04:27
quelle

4 Antworten

10

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.

    
tgallard 19.04.2011 10:27
quelle
7

Fügen Sie dem a -Tag das download -Attribut hinzu, das OnForeNoLoad vom Feuern zu verhindern scheint:

%Vor%

Aus dieser Antwort .

    
Felix 14.11.2014 04:06
quelle
3

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?

    
Stein G. Strindhaug 16.03.2010 12:58
quelle
3

Ich weiß, dass diese Antwort wirklich spät ist, aber es gibt eine einfache Lösung. Erstellen Sie dynamisch einen Iframe und setzen Sie den "src" davon per JavaScript auf Ihre Download-URL. Dies startet den Download, ohne das Entlade-Ereignis auszulösen (denke ich).

    
jvenema 04.11.2010 16:02
quelle

Tags und Links