Download
Inselchef
- javascript
Hallo,
ich möchte mich schon gleich im Vorraus entschuldigen: Diese Frage steht bestimmt irgendwo bei SelHTML oder im Archiv. Doch ich habe nun schon ein paar Stunden danach gesucht, offensichtlich bin ich einfach zu blöd, es zu finden:
Wie kann man mit JavaScript einen Download starten?
Ich wäre für Gnade dankbar.
Inselchef
Hallo Inselchef,
Wie kann man mit JavaScript einen Download starten?
starten in dem sinne überhaupt nicht. du kannst zwar der location.href des browserfensters die url der datei übergeben, aber den download bestätigen muss der user trotzdem. und das ist gut so! ;-)
freundl. Grüße aus Berlin, Raik
Hallo Raik,
ich hab's jetzt folgendermaßen gemacht:
window.location.href = "meinedatei.typ";
window.close();
Der Download funktioniert auch (ohne Abfrage!!!), doch danach wird das Fenster nicht automatisch wieder geschlossen. Warum nicht?
MfG
Inselchef
Hallo Inselchef,
window.location.href = "meinedatei.typ";
window.close();
Der Download funktioniert auch (ohne Abfrage!!!), doch danach wird das Fenster nicht automatisch wieder geschlossen. Warum nicht?
tja, ohne code kann ich dazu schlecht was sagen. poste den mal, wenn er nicht all zu lang ist (sonst verlinke ne beispielseite). abgesehen davon _darf_ der browser nicht ohne bestätigung etwas herunterladen. womit hast du das getestet?
freundl. Grüße aus Berlin, Raik
Hallo Raik, hier eine Beispieldatei, die der Originaldatei fast entspricht:
<! HTML DOCTYPE PUBLIC "-//WC3//DTD HTML 4.01 Transitional//EN">
<html><head><title>Download</title></head>
<script type="text/javascript">
<!--
window.location.href = "meinedatei.zip";
window.close();
//-->
</script>
<body>
Falls der Download nicht automatisch funktioniert, klicken Sie bitte <a href="meinedatei.zip>hier</a>.
</body>
</html>
Ach so, der Alternativtext wird auch nicht angezeigt.
Ich habe das mit dem Netscape 7.1 getestet. Er speichert die Datei auch nicht ab, sondern öffnet das Archiv gleich mit Mozilla, einem Programm zum Runterladen und Entpacken von zip-Files.
Inselchef
Hallo Inselchef,
Ach so, der Alternativtext wird auch nicht angezeigt.
klar. bevor der browser den geladen hat, bekommt das fenster ja auch schon eine neue adresse.
mach ne funktion draus, die du onload im body aufrufst.
mit dem selbst schliessen musst du sehen, ob ein self.focus davor weiterhilft.
Ich habe das mit dem Netscape 7.1 getestet. Er speichert die Datei auch nicht ab, sondern öffnet das Archiv gleich mit Mozilla, einem Programm zum Runterladen und Entpacken von zip-Files.
ob das so in ordnung ist, müssten die anderen vielleicht mal beurteilen. hab mal das topic geändert.
freundl. Grüße aus Berlin, Raik
Hallo,
mit dem selbst schliessen musst du sehen, ob ein self.focus davor weiterhilft.
Nein, das habe ich grade versucht. Funktioniert auch nicht. Das mit dem onload im body allerdings schon.
MfG
Inselchef
Hallo Inselchef,
mit dem selbst schliessen musst du sehen, ob ein self.focus davor weiterhilft.
Nein, das habe ich grade versucht. Funktioniert auch nicht. Das mit dem onload im body allerdings schon.
bleibt denn der inhalt des fensters bestehen?
versuch mal self.close in einem settimeout vor der url-zuweisung.
sorry, ich kann da auch nur raten.
freundl. Grüße aus Berlin, Raik
Moin!
bleibt denn der inhalt des fensters bestehen?
versuch mal self.close in einem settimeout vor der url-zuweisung.
sorry, ich kann da auch nur raten.
Das wird nie funktionieren. Das zu schließende Fenster soll ja den Download runterladen. Ohne Fenster kein Download. Und nach Start des Downloads existiert die HTML-Seite nicht mehr, also kein window.close() oder self.close().
Wer Pech hat, weil sein Browser dumm konfiguriert ist, der kriegt bei dem "normalen" Aufruf des Downloads zu allem Übel die Downloaddaten als kryptische Zeichen im Browserfenster angezeigt.
- Sven Rautenberg
Hallo Sven,
Ohne Fenster kein Download.
wenn ich beim IE die url in der adresszeile von hand eingebe und den download starte, kann ich das fenster schliessen und der download läuft weiter.
Und nach Start des Downloads existiert die HTML-Seite nicht mehr, also kein window.close() oder self.close().
klingt logisch. ich hab auch schon sowas vermutet, nur das obige spricht ja irgendwie dagegen, oder?
wie wäre es denn, wenn er ein formular per javascript abschicken würde?
Wer Pech hat, weil sein Browser dumm konfiguriert ist, der kriegt bei dem "normalen" Aufruf des Downloads zu allem Übel die Downloaddaten als kryptische Zeichen im Browserfenster angezeigt.
ja. :-) der dumme IE z.b.
freundl. Grüße aus Berlin, Raik
Moin!
Ohne Fenster kein Download.
wenn ich beim IE die url in der adresszeile von hand eingebe und den download starte, kann ich das fenster schliessen und der download läuft weiter.
Aber du brauchst das Fenster, um den Download anzustoßen. Es wird ein Request an den Server gesendet, welcher initial zunächst in das Fenster geladen werden soll. Also alte Seite löschen, neue reinpacken.
Dass dann nach Erhalt der HTTP-Header dem Browser klar wird, dass er es mit einem für ihn nicht darstellbaren Mime-Typ zu tun hat, und jetzt besser den Download-Dialog einblenden sollte, widerspricht dem ja nicht.
Und das Problem kann man auch mit einem setTimeout nicht vernünftig lösen. Denn wie gesagt: Ohne Fenster kein Download. Solange der Download also nicht dem "Downloadmanager" (andere Browser als der IE haben Einrichtungen, die diesen Namen verdienen...) übergeben wurde, würde ein Schließen des Fensters den Download killen.
Und das Problem ist: Wie schnell kommt der Download an?
Dauert das eine Sekunde? Wohl länger, selbst mit DSL. Denn mit Pech muß der Nameserver erstmal nach der IP gefragt werden, das dauert drei Sekunden, dann wird der Server kontaktiert - der dummerweise gerade hinter einer sehr ausgelasteten Leitung hängt (weitere 5 Sekunden gehen ins Land), also nicht sofort antwortet, weil er selbst ebenso ausgelastet ist (weitere 4 Sekunden gehen ins Land), um dann endlich, aber unter Paketverlust (also dauert alles länger, als normal - + 6 Sekunden) den HTTP-Header über die ausgelastete Leitung zu senden.
Summe dieser theoretischen Annahme: 3+5+4+6=18 Sekunden.
Mal ehrlich: Das ist ein Wert, den man mit Pech schon mal erleben kann. Erst recht, wenn man mit Modem surft.
Und das dumme ist: Je länger die ganze Sache dauert, desto wahrscheinlicher ist es, dass der Benutzer das Fenster gerade _nicht_ schließen will, weil er mit "Reload" seine Chancen auf einen erfolgreichen Download vielleicht noch verbessern kann. Oder die URL als Bookmark ablegen will, oder sie in einen besseren Downloadmanager kopieren.
Wenn dann also nach zehn Sekunden das Downloadfenster geschlossen wird, ist das mehr als ärgerlich.
Und deshalb sollte man sowas ganz einfach lassen.
- Sven Rautenberg
Hallo,
Und deshalb sollte man sowas ganz einfach lassen.
Das mag ja in so manchen Situationen okay sein, doch nicht in meiner; ich will nämlich folgendes realisieren:
1. Der User klickt auf den Downloadlink, um den Download zu starten; es soll jedoch mit dem Download auch eine email verschickt werden.
2. Es werden also mittels JavaScript 2 Fenster geöffnet, in dem einen wird automatisch der Download gestartet (war ja auch meine Anfangsfrage), und in dem zweiten wird mittels PHP eine email verschickt.
3. Beide Fenster sollen danach geschlossen werden, aufgrund höheren Komforts; wenn der User beide Fenster manuell schließen müsste, wäre das als lästig (und ein wenig komisch; zum Downloaden muss man 2 Fenster manuell schließen? Seit wann das?).
Das ist mein Problem. Oder kann man den Download und Mailversand in einem Fenster machen? Das würde das Ganze ja noch in Grenzen halten.
MfG
Inselchef