Pergunta

Como faço para inicializar um download automático de um arquivo no Internet Explorer?

Por exemplo, na página de download, eu quero o link para download a aparecer e uma mensagem: "Se você download não começar automaticamente .... etc". O download deve começar logo após o carregamento da página.

No Firefox isso é fácil, você só precisa incluir uma meta tag no cabeçalho, <meta http-equiv="Refresh" content="n;url"> onde n é o número de segundos e url é o URL de download. Isso não funciona no Internet Explorer. Como posso fazer este trabalho em navegadores Internet Explorer?

Foi útil?

Solução

SourceForge utiliza um elemento <iframe> com o atributo src="" apontando para o arquivo para download.

<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe>

(Efeito colateral: Não. Redirecionamento, não JavaScript, URL original permanece inalterado)

Outras dicas

I ódio quando os sites de download complicar tanto e uso hacks em vez de um bom e velho ligação .

versão Morto simples:

<a href="file.zip">Start automatic download!</a>

Ele funciona! Em cada browser!


Se você quiser baixar um arquivo que geralmente é exibido inline (como uma imagem), então HTML5 tem um atributo download que as forças de download do arquivo. Ele também permite substituir filename ( embora haja uma maneira melhor de fazê-lo ):

<a href="report-generator.php" download="result.xls">Download</a>

Versão com uma página "obrigado":

Se você quiser exibir "obrigado" após o download, em seguida, usar:

<a href="file.zip" 
   onclick="if (event.button==0) 
     setTimeout(function(){document.body.innerHTML='thanks!'},500)">
 Start automatic download!
</a>

Função em que setTimeout pode ser mais avançada e, por exemplo, página de download completo via AJAX (mas não navegar para fora da página - não toque window.location ou ativar outros links).

O ponto é que apontam para download é real, pode ser copiado, arrastado, interceptado por aceleradores de download, fica cor :visited, não re-download se a página é deixada em aberto após a reinicialização do navegador, etc.

Isso é o que eu uso para ImageOptim

Eu tive um problema e nenhuma das soluções acima funcionou para mim similar. Aqui está a minha tentativa (requer jquery):

$(function() {
  $('a[data-auto-download]').each(function(){
    var $this = $(this);
    setTimeout(function() {
      window.location = $this.attr('href');
    }, 2000);
  });
});

Uso: Basta adicionar um atributo chamado data-auto-download ao link apontando para o download em questão:

<p>The download should start shortly. If it doesn't, click
<a data-auto-download href="/your/file/url">here</a>.</p>

Ele deve funcionar em todos os casos.

Recentemente resolvido-lo, colocando o seguinte script na página.

setTimeout(function () { window.location = 'my download url'; }, 5000)

Eu concordo que uma meta-refresh seria melhor, mas se ele não funcionar o que você faz ...

Um simples pouco de jQuery resolvido este problema para mim.

$(function() {
   $(window).bind('load', function() {
      $("div.downloadProject").delay(1500).append('<iframe width="0" height="0" frameborder="0" src="[YOUR FILE SRC]"></iframe>'); 
   });
});

Na minha HTML, eu simplesmente tem

<div class="downloadProject"></div>

Tudo isso faz é esperar um segundo e meio, em seguida, acrescentar o div com o iframe referindo-se ao arquivo que você deseja baixar. Quando o iframe é actualizado para a página, o navegador faz o download do arquivo. Simples assim. : D

Isto é o que eu estou usando em alguns sites (requer jQuery):.

$(document).ready(function() {
    var downloadUrl = "your_file_url";
    setTimeout("window.location.assign('" + downloadUrl + "');", 1000);
});

O arquivo é baixado automaticamente após 1 segundo.

Eu usei esse, parece trabalhar e é JS apenas simples, nenhuma estrutura:

Your file should start downloading in a few seconds. 
If downloading doesn't start automatically
<a id="downloadLink" href="[link to your file]">click here to get your file</a>.

<script> 
    var downloadTimeout = setTimeout(function () {
        window.location = document.getElementById('downloadLink').href;
    }, 2000);
</script>

NOTA:. Isso inicia o tempo de espera no momento em que a página é carregada

Os trabalhos no Chrome, Firefox e IE8 e acima:

var link = document.createElement('a');
document.body.appendChild(link);
link.href = url;
link.click();

Eu verifiquei e descobri, ele vai trabalhar no clique de botão via escrever onclick evento para Anchor tag ou o botão de entrada

onclick='javascript:setTimeout(window.location=[File location], 1000);'

Certifique-se de servir o arquivo sem um cabeçalho no-cache! IE tem problemas com isso, se usuário tenta "aberto" a descarga sem salvar primeiro.

De volta às raízes, eu uso isso:

<meta http-equiv="refresh" content="0; url=YOURFILEURL"/>

Talvez não WC3 conforme mas funciona perfeito em todos os navegadores, não HTML5 / JQUERY / Javascript.

Greetings Tom:)

Mais uma:

var a = document.createElement('a');
a.setAttribute('href', dataUri);
a.setAttribute('download', filename);

var aj = $(a);
aj.appendTo('body');
aj[0].click();
aj.remove();

Este parecia estar a trabalhar para mim -. Em todos os navegadores

 <script type="text/javascript">
    window.onload = function(){
     document.location = 'somefile.zip';
    }
    </script>

Eu acho que isso vai funcionar para você. Mas os visitantes são fáceis se eles tem algo em segundos sem gastar mais tempo e, portanto, eles também irá novamente visitar o seu site. <a href="file.zip" onclick="if (event.button==0) setTimeout(function(){document.body.innerHTML='thanks!'},500)"> Start automatic download! </a>

Para aqueles que tentam provocar o download usando um link dinâmico é complicado fazê-lo funcionar de forma consistente em todos os navegadores.

Eu tive problemas no IE10 + download de um PDF e utilizada @dandavis' função download (< a href = "https://github.com/rndme/download" rel = "nofollow noreferrer"> https://github.com/rndme/download ).

IE10 + precisa msSaveBlob.

Espero que isso funciona todos os navegadores. Você também pode definir o calendário auto download.

<html>
<head>
<title>Start Auto Download file</title>
<script src="http://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
$(function() {
$('a[data-auto-download]').each(function(){
var $this = $(this);
setTimeout(function() {
window.location = $this.attr('href');
}, 2000);
});
});
</script>
</head>
<body>
<div class="wrapper">
<p>The download should start shortly. If it doesn't, click
<a data-auto-download href="auto-download.zip">here</a>.</p>
</div>
</body>
</html>

Demonstração Aqui

solução jquery Nice:

jQuery('a.auto-start').get(0).click();

Você pode até mesmo configurar diferente nome de arquivo para tag de download dentro <a>:

Your download should start shortly. If not - you can use
<a href="/attachments-31-3d4c8970.zip" download="attachments-31.zip" class="download auto-start">direct link</a>.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top