2017-10-18 56 views
1

J'ai une page web où il y a un bouton qui, lorsqu'on clique, génère un fichier csv (en faisant une conversion depuis json) qui est téléchargé par le navigateur. Il utilise essentiellement la logique de ce jsfiddle. Tout cela fonctionne en chrome, mais dans IE, rien ne se passe.Comment télécharger un fichier par programmation en utilisant JS (Internet Explorer)

var uri = 'data:text/csv;charset=utf-8,' + escape(CSV); 

    // Now the little tricky part. 
    // you can use either>> window.open(uri); 
    // but this will not work in some browsers 
    // or you will not get the correct file extension  

    //this trick will generate a temp <a /> tag 
    var link = document.createElement("a");  
    link.href = uri; 

    //set the visibility hidden so it will not effect on your web-layout 
    link.style = "visibility:hidden"; 
    link.download = fileName + ".csv"; 

    //this part will append the anchor tag and remove it after automatic click 
    document.body.appendChild(link); 
    link.click(); 
    document.body.removeChild(link); 

Le problème semble être que l'attribut de téléchargement d'une balise d'ancrage n'existe pas dans Internet Explorer. J'ai regardé de nombreux articles et publications, mais je n'ai pas trouvé de solution cohérente que je puisse utiliser dans la page.

Comment le code de jsfiddle peut-il être implémenté dans IE?

+0

Il peut être utile de répertorier la version d'IE que vous testez et l'exception. – Marquis

+0

Désolé, en fait, quelque chose que j'essayais plus tard a renvoyé une exception d'exécution. Le code que j'ai utilisé initialement (qui est similaire au jsfiddle) n'a rien fait quand on a cliqué sur le bouton, mais en chrome, le fichier est téléchargé et vous avez la possibilité de l'ouvrir. C'est dans IE 11. – loremIpsum1771

Répondre

2

C'est ce que j'ai utilisé par le passé. Cela gère IE et non-IE.

  var filename = "file.txt"; 
      var data = "some data"; 
      var blob = new Blob([data], { type: 'text/csv' }); 
      if (window.navigator.msSaveOrOpenBlob) { 
       window.navigator.msSaveBlob(blob, filename); 
      } 
      else { 
       var elem = window.document.createElement('a'); 
       elem.href = window.URL.createObjectURL(blob); 
       elem.download = filename; 
       document.body.appendChild(elem); 
       elem.click(); 
       document.body.removeChild(elem); 
      } 
+0

Merci! Cela semble fonctionner. Est-il possible d'avoir une extension de fichier prédéfinie lorsque l'utilisateur enregistre le fichier dans l'explorateur de fichiers? En ce moment, il enregistre comme le type générique "tous les fichiers". – loremIpsum1771

+0

Nvm, j'avais déjà concaténé l'extension ".csv" à une variable contenant le nom de fichier mais j'ai oublié de remplacer celle que vous avez utilisée avec la mienne. – loremIpsum1771