Qual é a melhor maneira entre navegadores de abrir uma caixa de diálogo de download (vamos supor que podemos definir a disposição de conteúdo: anexo nos cabeçalhos) sem navegar para fora da página atual ou abrir pop-ups, o que não funciona bem no Internet Explorer (IE ) 6.
javascript
mkoryak
fonte
fonte
Content-Type: application/octet-stream
eContent-Disposition: attachment
.Este javascript é bom que não abre uma nova janela ou guia.
fonte
Eu sempre adiciono um target = "_ blank" ao link de download. Isso abrirá uma nova janela, mas assim que o usuário clicar em salvar, a nova janela será fechada.
fonte
Coloque isso na seção do cabeçalho HTML, definindo
url
var como o URL do arquivo a ser baixado:Em seguida, coloque isso no corpo, que iniciará o download automaticamente após 5 segundos:
(A partir daqui .)
fonte
Eu sei que a pergunta foi feita,
7 years and 9 months ago
mas muitas soluções postadas parecem não funcionar, por exemplo, usar um<iframe>
funciona apenas comFireFox
e não funciona comChrome
.Melhor solução:
Ao melhor solução de trabalho para abrir um pop-up de download de arquivo
JavaScript
é usar umHTML
elemento de link, sem a necessidade de anexar o elemento de link ao,document.body
conforme declarado em outras respostas.Você pode usar a seguinte função:
Em meu aplicativo, estou usando desta forma:
Demonstração de trabalho:
Exibir trecho de código
Nota:
link.download
atributo para que o navegador não abra o arquivo em uma nova guia e acione o pop-up de download.fonte
link
clique e escondê-lo depois de um tempo limite, usando este código:link.onclick = function() { document.body.innerText = "The file is being downloaded ..."; setTimeout(function() { document.body.innerText = ""; }, 2000); }
, você pode vê-lo trabalhando no presente fiddle , mas tenha em mente que não é uma forma recomendada de fazê-lo, seria melhor manuseado se estivéssemos usandoAjax
.iframe
ver esta resposta .Tenho procurado uma boa maneira de usar o javascript para iniciar o download de um arquivo, como esta pergunta sugere. No entanto, essas respostas não foram úteis. Em seguida, fiz alguns testes do xbrowser e descobri que um iframe funciona melhor em todos os navegadores modernos IE> 8.
class="screenReaderText"
é minha classe para estilizar o conteúdo que está presente, mas não visível.css:
igual a .visuallyHidden em html5boilerplate
Eu prefiro isso ao método javascript window.open porque se o link for quebrado, o método iframe simplesmente não faz nada ao invés de redirecionar para uma página em branco dizendo que o arquivo não pôde ser aberto.
fonte
Usando a API HTML5 Blob Object-URL File:
fonte
URL.revokeObjectURL(url)
, quando o arquivo não for mais necessário para liberar memóriaModificar a localização da janela pode causar alguns problemas, especialmente quando você tem uma conexão persistente como o websocket. Por isso, sempre recorro à boa e velha solução iframe.
HTML
Javascript
fonte
Se o link for para um url de arquivo válido, simplesmente atribuir window.location.href funcionará.
No entanto, às vezes o link não é válido e um iframe é necessário.
Faça seu event.preventDefault normal para evitar que a janela seja aberta e, se você estiver usando jQuery, isso funcionará:
fonte
Depois de horas de tentativas, a função nasceu :) Tive um cenário em que tive que exibir o carregador a tempo enquanto o arquivo se preparava para download:
Trabalhando no Chrome, Safari e Firefox
fonte
E se:
Desta forma funciona em todos os navegadores (eu acho) e permite colocar uma mensagem como: "Se o download não começar em cinco segundos, clique aqui."
Se precisar que seja com javascript .. bem ...
Saudações
fonte
Um iframe pequeno / oculto pode funcionar para essa finalidade.
Dessa forma, você não precisa se preocupar em fechar o pop-up.
fonte