Was ist der beste browserübergreifende Weg, um einen Download-Dialog zu öffnen (nehmen wir an, wir können die Inhaltsdisposition festlegen: Anhang in den Kopfzeilen), ohne von der aktuellen Seite weg zu navigieren oder Popups zu öffnen, was in Internet Explorer (IE) nicht gut funktioniert ) 6.
javascript
mkoryak
quelle
quelle
Content-Type: application/octet-stream
und enthaltenContent-Disposition: attachment
.Dieses Javascript ist schön, dass es kein neues Fenster oder Tab öffnet.
quelle
Ich füge dem Download-Link immer ein target = "_ blank" hinzu. Dadurch wird ein neues Fenster geöffnet. Sobald der Benutzer auf Speichern klickt, wird das neue Fenster geschlossen.
quelle
Fügen Sie dies in den HTML-Kopfabschnitt ein und setzen Sie die
url
Variable auf die URL der herunterzuladenden Datei:Dann legen Sie dies in den Körper, der den Download nach 5 Sekunden automatisch startet:
(Von hier .)
quelle
Ich weiß, dass die Frage gestellt wurde,
7 years and 9 months ago
aber viele veröffentlichte Lösungen scheinen nicht zu funktionieren, zum Beispiel die Verwendung einer Funktion,<iframe>
die nur mitFireFox
funktioniert und mit der nicht funktioniertChrome
.Beste Lösung:
Die beste Lösung zum Öffnen eines Popups zum Herunterladen von Dateien
JavaScript
ist die Verwendung einesHTML
Link-Elements, ohne dass das Link-Element an dasdocument.body
in anderen Antworten angegebene Element angehängt werden muss.Sie können die folgende Funktion verwenden:
In meiner Anwendung verwende ich es folgendermaßen:
Arbeitsdemo:
Code-Snippet anzeigen
Hinweis:
link.download
Attribut verwenden, damit der Browser die Datei nicht in einem neuen Tab öffnet und das Download-Popup auslöst.quelle
link
klicken und versteckt es nach einem Timeout, diesen Code verwenden:link.onclick = function() { document.body.innerText = "The file is being downloaded ..."; setTimeout(function() { document.body.innerText = ""; }, 2000); }
Sie können es Arbeit sehen in diesem Geige , aber denken Sie daran, dass dies keine empfohlene Methode ist. Es wäre besser, wenn wir es verwenden würdenAjax
.iframe
sehen Sie diese Antwort .Ich habe nach einer guten Möglichkeit gesucht, mit Javascript den Download einer Datei zu starten, genau wie diese Frage nahelegt. Diese Antworten waren jedoch nicht hilfreich. Ich habe dann einige xbrowser-Tests durchgeführt und festgestellt, dass ein iframe auf allen modernen Browsern IE> 8 am besten funktioniert.
class="screenReaderText"
ist meine Klasse, um Inhalte zu stylen, die vorhanden, aber nicht sichtbar sind.CSS:
das gleiche wie .visuallyHidden in html5boilerplate
Ich ziehe dies der Javascript-window.open-Methode vor, da die iframe-Methode bei einer Unterbrechung des Links einfach nichts unternimmt, anstatt auf eine leere Seite umzuleiten, die besagt, dass die Datei nicht geöffnet werden konnte.
quelle
Verwenden der HTML5- Blob- Objekt-URL-Datei-API:
quelle
URL.revokeObjectURL(url)
, wenn die Datei nicht mehr benötigt wird, um den SpeicherDas Ändern des Speicherorts des Fensters kann zu Problemen führen, insbesondere wenn Sie eine dauerhafte Verbindung wie Websocket haben. Deshalb greife ich immer auf eine gute alte Iframe-Lösung zurück.
HTML
Javascript
quelle
Wenn der Link zu einer gültigen Datei-URL führt, funktioniert es einfach, window.location.href zuzuweisen.
Manchmal ist der Link jedoch ungültig und ein iFrame ist erforderlich.
Führen Sie Ihr normales event.preventDefault aus, um das Öffnen des Fensters zu verhindern. Wenn Sie jQuery verwenden, funktioniert dies wie folgt:
quelle
Nach stundenlangem Versuch ist die Funktion geboren :) Ich hatte ein Szenario, in dem ich den Loader rechtzeitig anzeigen musste, während sich die Datei auf den Download vorbereitet:
Arbeiten in Chrome, Safari und Firefox
quelle
Wie wäre es mit:
Diese Methode funktioniert in allen Browsern (glaube ich) und lässt Sie eine Nachricht wie folgt eingeben: "Wenn der Download nicht in fünf Sekunden startet, klicken Sie hier."
Wenn Sie es brauchen, um mit Javascript zu sein .. na ja ...
Grüße
quelle
Ein kleiner / versteckter Iframe kann für diesen Zweck funktionieren.
Auf diese Weise müssen Sie sich keine Sorgen mehr über das Schließen des Popups machen.
quelle