J'ai cherché un bon moyen d'utiliser javascript pour lancer le téléchargement d'un fichier, comme le suggère cette question. Cependant, ces réponses n'ont pas été utiles. J'ai ensuite fait des tests sur xbrowser et j'ai trouvé qu'une iframe fonctionne mieux sur tous les navigateurs modernes IE> 8.
downloadUrl = "http://example.com/download/file.zip";
var downloadFrame = document.createElement("iframe");
downloadFrame.setAttribute('src',downloadUrl);
downloadFrame.setAttribute('class',"screenReaderText");
document.body.appendChild(downloadFrame);
class="screenReaderText" est ma classe pour styliser le contenu qui est présent mais non visible.
css:
.screenReaderText {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
identique à .visuallyHidden dans html5boilerplate
Je préfère cela à la méthode javascript window.open car si le lien est rompu, la méthode iframe ne fait tout simplement rien, contrairement à la redirection vers une page vierge indiquant que le fichier ne peut pas être ouvert.
window.open(downloadUrl, 'download_window', 'toolbar=0,location=no,directories=0,status=0,scrollbars=0,resizeable=0,width=1,height=1,top=0,left=0');
window.focus();