75 votes

Faire une extension Chrome télécharger un fichier

Je crée une extension qui téléchargera un fichier mp3 à partir d'un site Web. J'essaie de le faire en créant un nouvel onglet avec le lien vers le fichier mp3, mais Chrome continue de l'ouvrir dans le lecteur au lieu de le télécharger. Existe-t-il un moyen de créer une fenêtre contextuelle pour demander à l'utilisateur d'"enregistrer sous" le fichier ?

12voto

AmanicA Points 1996

Il s'agit d'une version légèrement modifiée de la réponse de @Steve Mc qui en fait simplement une fonction généralisée qui peut facilement être copiée et utilisée telle quelle :

 function exportInputs() {
    downloadFileFromText('inputs.ini','dummy content!!')
}

function downloadFileFromText(filename, content) {
    var a = document.createElement('a');
    var blob = new Blob([ content ], {type : "text/plain;charset=UTF-8"});
    a.href = window.URL.createObjectURL(blob);
    a.download = filename;
    a.style.display = 'none';
    document.body.appendChild(a);
    a.click(); //this is probably the key - simulating a click on a download link
    delete a;// we don't need this anymore
}

11voto

Cody Points 996

Voici un moyen concis de télécharger un fichier en utilisant l' autorisation "téléchargements" dans le manifeste Chrome à l'aide de la solution @Xan et @AmanicA

 function downloadFile(options) {
    if(!options.url) {
        var blob = new Blob([ options.content ], {type : "text/plain;charset=UTF-8"});
        options.url = window.URL.createObjectURL(blob);
    }
    chrome.downloads.download({
        url: options.url,
        filename: options.filename
    })
}

// Download file with custom content
downloadFile({
  filename: "foo.txt",
  content: "bar"
});

// Download file from external host
downloadFile({
  filename: "foo.txt",
  url: "http://your.url/to/download"
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X