javascript - Enkleste måten å åpne et nedlastingsvindu uten å navigere bort fra siden
Hva er den beste måten på tvers av nettlesere å åpne en nedlastingsdialog (la oss anta at vi kan sette content-disposition: attachment i headerne) uten å navigere bort fra den nåværende siden, eller åpne popups, som ikke fungerer godt i Internet Explorer (IE) 6.
Svar #1
Denne JavaScripten er fin fordi den ikke åpner et nytt vindu eller en ny fane.
window.location.assign(url);
Svar #2
7 år har gått, og jeg vet ikke om det fungerer for IE6 eller ikke, men dette åpner OpenFileDialog i FF og Chrome.
var file_path = 'host/path/file.ext';
var a = document.createElement('A');
a.href = file_path;
a.download = file_path.substr(file_path.lastIndexOf('/') + 1);
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
Svar #3
Jeg vet at spørsmålet ble stilt for 7 år og 9 måneder siden, men mange publiserte løsninger ser ikke ut til å fungere, for eksempel fungerer bruk av en <iframe> bare med Firefox og fungerer ikke med Chrome.
Beste løsning:
Den beste arbeidende løsningen for å åpne en filnedlastingspop-up i JavaScript er å bruke et HTML-linkelement, uten behov for å legge linkelementet til document.body som angitt i andre svar.
Du kan bruke følgende funksjon:
function downloadFile(filePath){
var link=document.createElement('a');
link.href = filePath;
link.download = filePath.substr(filePath.lastIndexOf('/') + 1);
link.click();
}
I min applikasjon bruker jeg det på denne måten:
downloadFile('report/xls/myCustomReport.xlsx');
Arbeidende demo:
function downloadFile(filePath) {
var link = document.createElement('a');
link.href = filePath;
link.download = filePath.substr(filePath.lastIndexOf('/') + 1);
link.click();
}
downloadFile("http://www.adobe.com/content/dam/Adobe/en/accessibility/pdfs/accessing-pdf-sr.pdf");Merk:
- Du må bruke
link.download-attributtet slik at nettleseren ikke åpner filen i en ny fane og utløser nedlastingsvinduet. - Dette ble testet med flere filtyper (docx, xlsx, png, pdf, ...).
Svar #4
Jeg legger alltid til target="_blank" på nedlastingslenken. Dette vil åpne et nytt vindu, men så snart brukeren klikker lagre, lukkes det nye vinduet.
Svar #5
Sett dette i HTML-hodedelen, og sett url-variabelen til URL-en til filen som skal lastes ned:
<script type="text/javascript">
function startDownload()
{
var url='http://server/folder/file.ext';
window.open(url, 'Download');
}
</script>
Sett deretter dette i kroppen, som vil starte nedlastingen automatisk etter 5 sekunder:
<script type="text/javascript">
setTimeout('startDownload()', 5000); //starts download after 5 seconds
</script>
(Fra her.)
Svar #6
Jeg har lett etter en god måte å bruke JavaScript for å starte nedlasting av en fil, akkurat som dette spørsmålet antyder. Imidlertid har ikke disse svarene vært hjelpsomme. Jeg gjorde deretter noen testing i forskjellige nettlesere og har funnet ut at en iframe fungerer best i alle moderne nettlesere 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" er min klasse for å style innhold som er til stede, men ikke synlig.
css :
.screenReaderText {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
samme som .visuallyHidden i html5boilerplate
Jeg foretrekker dette fremfor JavaScript window.open-metoden fordi hvis lenken er ødelagt, gjør iframe-metoden rett og slett ingenting, i motsetning til å omdirigere til en blank side som sier at filen ikke kunne åpnes.
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();
