Téléchargement d'un CSV dynamique dans Internet Explorer

Le code suivant fonctionne à la fois dans FireFox et Chrome, mais pas dans IE. Essentiellement, j'ai un objet JSON qui se transforme en un tableau, puis vers un format csv, lorsque je clique sur le bouton FF ou Chrome, le fichier est téléchargé ou la fenêtre Enregistrer sous s'ouvre, mais dans IE, un nouvel onglet s'ouvre. Dans un monde parfait, l'IE n'existerait pas, mais dans le monde réel, nous devons le faire fonctionner, lol.

$("#csvbtn").click(function(e){ e.preventDefault(); var json_obj= JSON.parse(result); var csv = JSON2CSV(json_obj); window.open("data:text/csv;charset=utf-8," + escape(csv)); }); 

BTW, j'utilise IE 11 dans Windows 8 pour tester cela, si cela fait une différence.

Merci a tous!

C'est ma solution si quelqu'un d'autre cherche une solution. Maintenant, il fonctionne avec FF, Chrome et IE

 var csv = JSON2CSV(json_obj); var blob = new Blob([csv],{type: "text/csv;charset=utf-8;"}); if (navigator.msSaveBlob) { // IE 10+ navigator.msSaveBlob(blob, "csvname.csv") } else { var link = document.createElement("a"); if (link.download !== undefined) { // feature detection // Browsers that support HTML5 download attribute var url = URL.createObjectURL(blob); link.setAttribute("href", url); link.setAttribute("download", "csvname.csv"); link.style = "visibility:hidden"; document.body.appendChild(link); link.click(); document.body.removeChild(link); } } 

Maintenant, je dois juste savoir s'il existe un moyen d'enregistrer les sauvegardes lorsque l'écran s'affiche au lieu de sauvegarder automatiquement le fichier. Si quelqu'un sait la réponse à cela, partagez. Pour l'instant, mes utilisateurs devront utiliser cette fonctionnalité.

Merci à tous pour toutes les excellentes réponses, vous êtes géniaux.

Internet Explorer ne permet pas aux URI de données en tant que contenu navigable, à des fins de sécurité. Pour comprendre pourquoi, je vous encourage à lire le petit article sur papier de Henning Klevjer, Phishing par URI de données . En résumé, il a été démontré que l'on ouvrait des avenues par lesquelles l'utilisateur final pourrait être incité à renoncer à des informations sensibles.

En outre, à partir de la documentation du protocole de données sur MSDN :

Pour des raisons de sécurité, les URI de données sont limités aux ressources téléchargées. Les URI de données ne peuvent pas être utilisés pour la navigation, pour le script ou pour remplir des éléments de cadre ou d'iframe.

Pour être honnête, passer un URI de données à window.open se sent un peu piquante. Au lieu de cela, vous devez utiliser une API pour gérer le processus (à condition qu'il existe). Si vous souhaitez télécharger un fichier dans la machine de l'utilisateur dans Internet Explorer, envisagez d'utiliser navigator.msSaveBlob ou navigator.msSaveOrOpenBlob .

À titre d'exemple, considérez ce qui suit:

 if ( window.navigator.msSaveOrOpenBlob && window.Blob ) { var blob = new Blob( [ "A,B\nC,D" ], { type: "text/csv" } ); navigator.msSaveOrOpenBlob( blob, "strings.csv" ); }