Bonjour,

Je dois générer un lien permettant le download un fichier txt mais en modifiant sont extension en csv lors du transfert.

J'ai comme contraintes :
aucun script coté serveur.
Les scripts sont tous en JavaScript donc coté client,
Pas de Jquery ou framework, du JavaScript pur uniquement
Modification de l'extension du fichier (de txt à csv)

Concernant les navigateurs Chromes et FF aucune difficulté, la génération d'un simple lien HTML fonctionne bien

Code html : Sélectionner tout - Visualiser dans une fenêtre à part
<a href="./'UnFichierTxt'" title="Download data file." download="'+filecsv+'"><img src="../images/csv.png"></a>';

Pour IE j'ai implémenté la fonction si dessous que marchait "bien". Mais avec IE11 ça ne fonctionne plus. Apparemment execCommand est bloqué.

Code html : Sélectionner tout - Visualiser dans une fenêtre à part
<img SRC="../images/txt.png" name="sav" onclick="SaveToDisk(\'./'+filetxt+'\',\''+filecsv+'\');" title="Download data file.">';


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function SaveToDisk(fileURL, fileName) {
    // for non-IE
    if (!window.ActiveXObject) {
        var save = document.createElement('a');
        save.href = fileURL;
        save.target = '_blank';
        save.download = fileName || fileURL;
        var evt = document.createEvent('MouseEvents');
        evt.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0,
            false, false, false, false, 0, null);
        save.dispatchEvent(evt);
        (window.URL || window.webkitURL).revokeObjectURL(save.href);
    }
    else if ( !! window.ActiveXObject && document.execCommand)     {
        var _window = window.open(fileURL, "_blank");
        _window.document.close();
        _window.document.execCommand('SaveAs', true, fileName || fileURL)
        _window.close();
    }
}
Tous cela commençant à ressembler à une usine à gaz, je cherche une solution cross-browser plus "propre" fonctionnant avec les navigateur IE7 à IE11 et FireFox.
Si vous avez des suggestions, ou des exemples je suis preneur.

Merci,