Bestand downloaden met behulp van Javascript/jQuery
Ik heb een zeer vergelijkbare eis gespecificeerd hier.
Ik moet de browser van de gebruiker's handmatig een download laten starten wanneer $('a#someID').click();
Maar ik kan de window.href
methode niet gebruiken, omdat het de huidige pagina inhoud vervangt met het bestand dat je'probeert te downloaden.
In plaats daarvan wil ik de download openen in een nieuw venster/tabblad. Hoe is dit mogelijk?
322
3
Gebruik een onzichtbare
<iframe>
:Om de browser te dwingen een bestand te downloaden dat hij anders wel zou kunnen renderen (zoals HTML of tekstbestanden), moet de server het MIME Type van het bestand op een onzinnige waarde zetten, zoals
application/x-please-download-me
of als alternatiefapplication/octet-stream
, dat gebruikt wordt voor willekeurige binaire gegevens.Als je het alleen in een nieuw tabblad wilt openen, is de enige manier om dit te doen dat de gebruiker op een link klikt waarvan het
target
attribuut is ingesteld op_blank
.In jQuery:
Telkens wanneer op die link wordt geklikt, wordt het bestand gedownload in een nieuw tabblad/venster.
2019 moderne browsers update
Dit is de aanpak die ik nu zou aanbevelen met een paar voorbehouden:
2012 originele jQuery/iframe/cookie gebaseerde aanpak
Ik heb de jQuery File Download plugin (Demo) (GitHub) gemaakt die ook zou kunnen helpen met jouw situatie. Het werkt ongeveer hetzelfde met een iframe, maar heeft een aantal coole functies die ik erg handig vond:
Zeer eenvoudig op te zetten met mooie visuals (jQuery UI Dialog, maar niet vereist), alles is ook getest
De gebruiker verlaat nooit dezelfde pagina vanwaar hij een bestand heeft gedownload. Deze functie wordt steeds belangrijker voor moderne webapplicaties
SuccessCallback en failCallback functies zorgen ervoor dat je expliciet kan zijn over wat de gebruiker ziet in beide situaties
In combinatie met jQuery UI kan een ontwikkelaar eenvoudig een modal tonen die de gebruiker vertelt dat er een file wordt gedownload, de modal weer uitschakelen nadat de download is gestart of zelfs de gebruiker op een vriendelijke manier informeren dat er een fout is opgetreden. Zie de Demo voor een voorbeeld hiervan. Hopelijk helpt dit iemand!
Hier is een eenvoudige use case demo die gebruik maakt van de plugin source met beloftes. De demo pagina bevat ook vele andere, 'betere UX' voorbeelden.
Als je al jQuery gebruikt, kun je daar gebruik van maken om een kleiner knipsel te maken Een jQuery versie van Andrew's antwoord: