À partir du code suivant, je crée une balise d'ancrage dynamique qui télécharge un fichier. Ce code fonctionne bien dans Chrome mais pas dans IE. Comment puis-je obtenir ce travail
<div id="divContainer">
<h3>Sample title</h3>
</div>
<button onclick="clicker()">Click me</button>
<script type="text/javascript">
function clicker() {
var anchorTag = document.createElement('a');
anchorTag.href = "http://cdn1.dailymirror.lk/media/images/finance.jpg";
anchorTag.download = "download";
anchorTag.click();
var element = document.getElementById('divContainer');
element.appendChild(anchorTag);
}
</script>
Internet Explorer ne prend actuellement pas en charge l'attribut Download
sur les balises A
.
Voir http://caniuse.com/download et http://status.modern.ie/adownloadattribute ; ce dernier indique que la fonctionnalité est "à l'étude" pour IE12.
Dans mon cas, puisqu'il est nécessaire de prendre en charge l'utilisation de IE 11 (version 11.0.9600.18665), j'ai fini par utiliser la solution fournie par @Henners pour son commentaire:
// IE10+ : (has Blob, but not a[download] or URL)
if (navigator.msSaveBlob) {
return navigator.msSaveBlob(blob, fileName);
}
C'est assez simple et pratique.
Apparemment, cette solution a été trouvée sur la fonction Javascript download créée par dandavis .
Vieille question, mais je pensais ajouter notre solution. Voici le code que j'ai utilisé sur mon dernier projet. Ce n'est pas parfait, mais il a passé l'assurance qualité dans tous les navigateurs et dans IE9 +.
downloadCSV(data,fileName){
var blob = new Blob([data], {type: "text/plain;charset=utf-8;"});
var anchor = angular.element('<a/>');
if (window.navigator.msSaveBlob) { // IE
window.navigator.msSaveOrOpenBlob(blob, fileName)
} else if (navigator.userAgent.search("Firefox") !== -1) { // Firefox
anchor.css({display: 'none'});
angular.element(document.body).append(anchor);
anchor.attr({
href: 'data:attachment/csv;charset=utf-8,' + encodeURIComponent(data),
target: '_blank',
download: fileName
})[0].click();
anchor.remove();
} else { // Chrome
anchor.attr({
href: URL.createObjectURL(blob),
target: '_blank',
download: fileName
})[0].click();
}
}
L'utilisation de l'API spécifique à ms a été plus efficace dans IE. Notez également que certains navigateurs exigent que l'ancre se trouve réellement dans le DOM pour que l'attribut de téléchargement fonctionne, contrairement à Chrome, par exemple. Nous avons également constaté des incohérences dans le fonctionnement des objets blobs dans divers navigateurs. Certains navigateurs ont également une limite d'exportation. Cela permet la plus grande exportation CSV possible dans chaque navigateur.
À partir de la version 10547+, le navigateur Microsoft Edge prend désormais en charge l'attribut download
sur les balises a
.
<a href="download/image.png" download="file_name.png">Download Image</a>
Mise à jour des fonctionnalités Edge: https://dev.windows.com/en-us/Microsoft-Edge/platform/changelog/desktop/10547/
a [download] standard: http://www.w3.org/html/wg/drafts/html/master/links.html#attr-hyperlink-download
Ce fragment de code permet d’enregistrer un blob dans le fichier dans IE, Edge et d’autres navigateurs modernes.
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === 4 && request.status === 200) {
// Extract filename form response using regex
var filename = "";
var disposition = request.getResponseHeader('Content-Disposition');
if (disposition && disposition.indexOf('attachment') !== -1) {
var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
}
if (window.navigator.msSaveOrOpenBlob) { // for IE and Edge
window.navigator.msSaveBlob(request.response, filename);
} else {
// for modern browsers
var a = document.createElement('a');
a.href = window.URL.createObjectURL(request.response);
a.download = filename;
a.style.display = 'none';
document.body.appendChild(a);
a.click();
}
}
button.disabled = false;
dragArea.removeAttribute('spinner-visible');
// spinner.style.display = "none";
};
request.open("POST", "download");
request.responseType = 'blob';
request.send(formData);
Pour IE et Edge, utilisez: msSaveBlob
Ajoutez d'abord l'enfant, puis cliquez sur
Ou vous pouvez utiliser window.location = 'url';
Comme mentionné dans la réponse précédente, l'attribut de téléchargement n'est pas pris en charge dans IE. Pour contourner le problème, vous pouvez utiliser iFrames pour télécharger le fichier. Voici un exemple d'extrait de code.
function downloadFile(url){
var oIframe = window.document.createElement('iframe');
var $body = jQuery(document.body);
var $oIframe = jQuery(oIframe).attr({
src: url,
style: 'display:none'
});
$body.append($oIframe);
}