Как начать автоматическую загрузку файла в Internet Explorer? - PullRequest
66 голосов
/ 01 октября 2008

Как инициализировать автоматическую загрузку файла в Internet Explorer?

Например, на странице загрузки я хочу, чтобы появилась ссылка для загрузки и сообщение: «Если загрузка не начинается автоматически .... и т. Д.». Загрузка должна начаться вскоре после загрузки страницы.

В Firefox это просто, вам просто нужно включить мета-тег в заголовок, <meta http-equiv="Refresh" content="n;url">, где n - количество секунд, а url - URL-адрес загрузки. Это не работает в Internet Explorer. Как мне заставить это работать в браузерах Internet Explorer?

Ответы [ 17 ]

101 голосов
/ 01 октября 2008

SourceForge использует элемент <iframe> с атрибутом src="", указывающим на файл для загрузки.

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

(Побочный эффект: без перенаправления, без JavaScript, исходный URL остается неизменным.)

49 голосов
/ 19 ноября 2008

Я ненавижу , когда сайты так сильно загружают и используют хаки вместо старой доброй ссылки .

Мёртвая простая версия:

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

Это работает! В каждом браузере!


Если вы хотите загрузить файл, который обычно отображается встроенным (например, изображение), тогда HTML5 имеет атрибут download, который вызывает загрузку файла. Это также позволяет вам переопределить имя файла (, хотя есть лучший способ сделать это ):

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

Версия со страницей "Спасибо":

Если вы хотите отобразить «спасибо» после загрузки, используйте:

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

Функция в этом setTimeout может быть более продвинутой и, например, загрузите полную страницу через AJAX (но не уходите со страницы - не трогайте window.location и не активируйте другие ссылки).

Дело в том, что ссылка на скачивание является реальной, ее можно скопировать, перетащить, перехватить ускорителями загрузки, получить цвет :visited, не загружать повторно, если страница остается открытой после перезапуска браузера и т. Д.

Это то, что я использую для ImageOptim

21 голосов
/ 07 марта 2012

У меня была похожая проблема, и ни одно из вышеперечисленных решений не помогло мне. Вот моя попытка (требуется jquery):

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

Использование: Просто добавьте атрибут с именем data-auto-download к ссылке, указывающей на рассматриваемый файл для загрузки:

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

Должно работать во всех случаях.

21 голосов
/ 01 октября 2008

Я недавно решил это, разместив следующий скрипт на странице.

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

Я согласен, что мета-обновление будет лучше, но если это не сработает, что ты делаешь ...

7 голосов
/ 25 июня 2011

Простая часть jQuery решила эту проблему для меня.

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

В моем HTML у меня просто есть

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

Все, что нужно сделать, это подождать с половиной секунды, а затем добавить div с iframe, ссылающимся на файл, который вы хотите загрузить. Когда iframe обновляется на странице, ваш браузер загружает файл. Просто как тот. : D

5 голосов
/ 04 октября 2012

Я использовал это, кажется, работает и просто JS, без фреймворка:

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>

ПРИМЕЧАНИЕ. Тайм-аут начинается с момента загрузки страницы.

5 голосов
/ 28 января 2013

Это то, что я использую на некоторых сайтах (требуется jQuery).:

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

Файл загружается автоматически через 1 секунду.

5 голосов
/ 28 апреля 2016

Работает на Chrome, Firefox и IE8 и выше:

var link = document.createElement('a');
document.body.appendChild(link);
link.href = url;
link.click();
3 голосов
/ 16 июня 2012

Я проверил и нашел, он будет работать при нажатии кнопки через запись события onclick в тег привязки или кнопку ввода

onclick='javascript:setTimeout(window.location=[File location], 1000);'
2 голосов
/ 15 апреля 2019

Еще один:

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

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