Das ist verrückt, aber ich weiß nicht, wie ich das machen soll, und weil die Wörter so häufig vorkommen, ist es schwierig, in Suchmaschinen zu finden, was ich brauche. Ich denke, das sollte leicht zu beantworten sein.
Ich möchte einen einfachen Dateidownload, der das Gleiche tun würde:
<a href="file.doc">Download!</a>
Ich möchte jedoch eine HTML-Schaltfläche verwenden, z. B. eine der folgenden:
<input type="button" value="Download!">
<button>Download!</button>
Ist es auch möglich, einen einfachen Download über JavaScript auszulösen?
$("#fileRequest").click(function(){ /* code to download? */ });
Ich bin definitiv nicht auf der Suche nach einer Möglichkeit, einen Anker zu erstellen, der wie eine Schaltfläche aussieht, Back-End-Skripte zu verwenden oder mit Server-Headern oder MIME-Typen herumzuspielen.
javascript
html
download
Brentonstrin
quelle
quelle
Antworten:
Für die Schaltfläche können Sie tun
quelle
Sie können einen Download mit dem HTML5-
download
Attribut auslösen .Wo:
path_to_file
ist ein Pfad, der in eine URL mit demselben Ursprung aufgelöst wird . Das bedeutet, dass die Seite und die Datei dieselbe Domäne, Unterdomäne, dasselbe Protokoll (HTTP vs. HTTPS) und denselben Port (falls angegeben) haben müssen. Ausnahmen sindblob:
unddata:
(die immer funktionieren) undfile:
(die nie funktionieren).proposed_file_name
ist der Dateiname, in dem gespeichert werden soll. Wenn es leer ist, verwendet der Browser standardmäßig den Dateinamen.Dokumentation: MDN , HTML Standard beim Herunterladen , HTML Standard bei
download
, CanIUsequelle
download
undtarget="_blank"
scheint ausreichend zu sein, um die meisten Anwendungsfälle abzudecken. Browser, die das verstehen,download
behandeln es als Download, andernfalls wird es in einem neuen Tab geöffnet.HTML:
quelle
Mit jQuery:
quelle
Alter Thread, aber es fehlt eine einfache js-Lösung:
quelle
Sie können es mit "Trick" mit unsichtbarem Iframe tun. Wenn Sie "src" festlegen, reagiert der Browser so, als würden Sie auf einen Link mit demselben "href" klicken. Im Gegensatz zur Lösung mit Formular können Sie zusätzliche Logik einbetten, z. B. das Aktivieren des Downloads nach einer Zeitüberschreitung, wenn einige Bedingungen erfüllt sind usw.
Es ist auch sehr leise, es gibt kein blinkendes neues Fenster / Tab wie bei der Verwendung
window.open
.HTML:
Javascript:
quelle
Bootstrap-Version
Dokumentiert in Bootstrap 4-Dokumenten und funktioniert auch in Bootstrap 3.
quelle
Ich denke, das ist die Lösung, nach der Sie gesucht haben
Ich hatte einen Fall, in dem mein Javascript eine CSV-Datei generiert hat. Da es keine Remote-URL zum Herunterladen gibt, verwende ich die folgende Implementierung.
quelle
location.href
Lösungen angegeben.Wie wäre es mit:
quelle
Sie können den Download-Link ausblenden und die Schaltfläche darauf klicken lassen.
quelle
Wenn Sie nach einer Vanille-JavaScript-Lösung (kein jQuery) suchen und das HTML5-Attribut nicht verwenden möchten, können Sie dies versuchen.
quelle
Dies hat schließlich für mich funktioniert, da die herunterzuladende Datei beim Laden der Seite ermittelt wurde.
JS, um das Aktionsattribut des Formulars zu aktualisieren:
JS aufrufen, um das Aktionsattribut des Formulars zu aktualisieren:
Formular-Tag mit der Schaltfläche "Senden":
Folgendes hat NICHT funktioniert:
quelle
Wenn Sie kein Formular verwenden können, passt ein anderer Ansatz mit Downloads gut. Downloadjs verwenden die API für Blob- und HTML 5-Dateien unter der Haube:
{downloadjs (URL, Dateiname)}) />
* Es ist jsx / react-Syntax, kann aber in reinem HTML verwendet werden
quelle
Fügen Sie irgendwo zwischen Ihren
<body>
und</body>
Tags eine Schaltfläche mit dem folgenden Code ein:Das wird sicher funktionieren!
quelle
Eine andere Möglichkeit für den Fall, dass Sie eine komplexe URL haben,
file.doc?foo=bar&jon=doe
besteht darin, ein verstecktes Feld innerhalb des Formulars hinzuzufügeninspiriert von @Cfreak Antwort, die nicht vollständig ist
quelle
Sie können Tags ohne Text, aber mit Link hinzufügen. und wenn Sie auf die Schaltfläche klicken, wie Sie sie im Code haben, führen Sie einfach die Funktion $ ("yourlinkclass"). click () aus.
quelle
Download-Attribut mach es
quelle
Wenn Sie das
<a>
Tag verwenden, vergessen Sie nicht, die gesamte URL zu verwenden, die zur Datei führt - dh:quelle
Für mich funktioniert das Hinzufügen einer Schaltfläche anstelle eines Ankertextes sehr gut.
Nach den meisten Regeln ist es vielleicht nicht in Ordnung, aber es sieht ziemlich gut aus.
quelle
<a>
Elemente dürfen keine<button>
Elemente enthalten .