154 Stimmen

Einfachste Möglichkeit, ein Download-Fenster zu öffnen, ohne die Seite zu verlassen

Was ist der beste browserübergreifende Weg, um einen Download-Dialog zu öffnen (nehmen wir an, wir können content-disposion:attachment in den Headern einstellen), ohne von der aktuellen Seite weg zu navigieren oder Popups zu öffnen, was im Internet Explorer (IE) 6 nicht gut funktioniert.

3voto

Gaurav Kunal Punkte 49

Beste Lösung gemäß der neuen Chrom-Spezifikation https://developers.google.com/web/updates/2018/02/chrome-65-deprecations

Vanille-JavaScript

public static downloadFile(url: string): void {
     const xmlHttp = new XMLHttpRequest();
     xmlHttp.onreadystatechange = () => {
       if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
         const blobUrl = window.URL.createObjectURL(xmlHttp.response);
         const e = document.createElement('a');
         e.href = blobUrl;
         e.download = blobUrl.substr(blobUrl.lastIndexOf('/') + 1);
         document.body.appendChild(e);
         e.click();
         document.body.removeChild(e);
       }
     };
     xmlHttp.responseType = 'blob';
     xmlHttp.open('GET', url, true);
     xmlHttp.send(null);
   }

Wenn Sie Angular verwenden, versuchen Sie dies.

async downloadBrochure(url: string) {
    try {
      const res = await this.httpClient.get(url, { responseType: 'blob' }).toPromise();
      this.downloadFile(res);
    } catch (e) {
      console.log(e.body.message);
    }
  }

  downloadFile(data) {
    const url = window.URL.createObjectURL(data);
    const e = document.createElement('a');
    e.href = url;
    e.download = url.substr(url.lastIndexOf('/') + 1);
    document.body.appendChild(e);
    e.click();
    document.body.removeChild(e);
  }

1voto

Wie wäre es damit:

<meta http-equiv="refresh" content="5;url=http://site.com/file.ext">

Dieser Weg funktioniert auf allen Browsern (glaube ich) und ermöglicht es Ihnen, eine Nachricht wie: "Wenn der Download nicht in fünf Sekunden beginnt, klicken Sie hier."

Wenn Sie es brauchen, um mit Javascript zu sein... nun...

document.write('<meta http-equiv="refresh" content="5;url=http://site.com/file.ext">');

Mit freundlichen Grüßen

0voto

Simon Punkte 37405

Ein kleiner/versteckter iframe kann für diesen Zweck verwendet werden.

Auf diese Weise müssen Sie sich nicht darum kümmern, das Pop-up zu schließen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X