IE download-Datei
Verwenden Sie die folgenden Zeilen von code, den ich in der Lage bin, eine Datei herunterzuladen, die in der Antwort von einem Ajax-Aufruf in Firefox, Chrome, Opera. Jedoch im IE das href
Attribut download
wird nicht unterstützt. Daher die unten funktioniert nicht im IE.
HTML:
<div class="fRight" style="margin-left:5px; margin-rigth:5px" >
<input type="button" value="Request File" id = "chReqFileBtn" onclick = "handleClick"/>
<a href="#" id="challengeReqFileAnchor" style="visibility: hidden"></a>
</div>
JavaScript:
function handleClick()
{
var code = $('#code').val();
var quantity = $('#quantity').val();
var req = $.ajax(
{
'type': 'POST',
'url' : $apiBasePath+'config/challenge-file',
contentType : 'application/json',
'data': JSON.stringify({'code':code, 'quantity':quantity}),
'success':function(response, status, xhr)
{
var code = xhr.getResponseHeader('Operation-Code');
var anch = $('#challengeReqFileAnchor');
anch.attr(
{
"download" : 'request.bin',
"href" : "data:text/plain," + response
});
anch.get(0).click();
},
'error': function(request,status,errorThrown)
{
......
}
});
$pendingReqs.push(req);
}
Welche Möglichkeiten hätte ich, um zu erreichen das gleiche Verhalten im IE als auch?
- Warum lassen Sie nicht die server umgehen? Was ist der Zweck der ajax-call?
- Manchmal kann ein niedrigerer-tech-Ansatz ist besser - weil es nicht nur den IE, wird Probleme haben! Betrachten Sie das speichern der AJAX-Ergebnis auf dem server (oder einfach machen es zu einem normalen HTTP-request an Erster Stelle) und der server die entsprechenden
content-disposition
Header. - Aber wenn Sie unbedingt wollen, dass diese im browser an: github.com/ChenWenBrian/FileSaver.js#examples
- Auf der server-Seite habe ich den spezifischen Header zu erzwingen, donwload ,da dieser aber ajax hat es keine Wirkung.Ich Tue es in ajax da muss ich auch zum ausführen von zusätzlichem code in der Antwort .
- mein downloader script funktioniert in IE10+: danml.com/js/download.js es verwendet msSaveBlob für IE10 compat...
- warum gehst du nicht erstellen Sie so etwas wie meine fiddle: jsfiddle.net/GuyT/r8oknrko/1
Du musst angemeldet sein, um einen Kommentar abzugeben.
Download-Attribut wird NICHT unterstützt in IE und iOS Safari
IE<10:
Befehl SaveAs mit execCommand kann den trick tun, indem Sie element-Inhalte zum herunterladen.
Nachteile:
IE>=10
Mit msSaveBlob, es ist eine Methode, die es ermöglicht, zu speichern, Blob oder die Datei durch das senden dieses headers:
Überprüfen Speichern von Dateien lokal mithilfe von Blob-und msSaveBlob
Nachteile:
Anderen Browsern
Wenn Sie nicht wollen, um alle, die durch sich selbst, es ist eine schöne Bibliothek FileSaver.js, um generierte Dateien speichern auf client-Seite. Es unterstützt Firefox, Chrome, Chrome für Android, IE 10+, Opera und Safari. Für IE<10 es ist eine Abspaltung der Bibliothek, fügt saveTextAs zum speichern von text-Dateien (.htm -, .html -, .txt)
Cross-Browser-Lösung
Einem server-side script erhält, dass mit dem Namen, Daten, meme geben, dann senden Sie die Datei mit dem header
Content-Disposition: attachment; filename=FILENAME
Ich denke, dies ist im Zusammenhang mit der
anch.get(0).click();
unterstützt nicht alle browser speziell fürhidden
Anker, so dass Sie kann versuchen, folgenden code stattdessenIE nicht unterstützt, weder mit der Navigation zu einem Daten-URI noch die
download
Attribut.Sie können
navigator.msSaveBlob
zum speichern der Datei für den IE 10+.Sie können überprüfen
window.navigator.msSaveBlob
- und write-IE-spezifischen Code, ansonsten verwenden Sie vorhandenen code in Datei speichern.Sie können überprüfen, folgenden link für mehr details:
Speichern von Dateien lokal mithilfe von Blob-und msSaveBlob
IE nicht unterstützt
download
- tag.Gibt es eine hässlich hack, Sie verwenden können, jedoch.
Erstellen eine unsichtbare
iframe
:Schreiben Sie Ihre Daten, um die iframe -
document
:Verwenden execCommand um die Datei zu speichern (eigentlich, um die Eingabeaufforderung Dialogfeld "speichern unter"):
Beachten Sie, dass
execCommand
funktioniert nicht im IE11. Ich weiß, es ist fast unmöglich zu erkennen ist der browser völlig korrekt. Jedoch können Sie versuchen, diese als backup-routine, wenn die Datei speichern schlägt fehl, in Ihrem code.Meine javascript-version für die download-Datei von IE11 mit Stückliste und charset für excel: