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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

<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

Ответ 3

У меня была аналогичная проблема, и ни один из вышеперечисленных решений не работал у меня. Здесь моя попытка (требуется 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>

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

Ответ 4

Недавно я решил это, разместив на странице следующие script.

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

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

Ответ 5

Простой бит 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

Ответ 6

Я использовал это, кажется, работает и просто 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>

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

Обязательно подайте файл без заголовка без кэша! У IE есть проблемы с этим, если пользователь пытается "открыть" загрузку без сохранения в первую очередь.

Ответ 11

Вернемся к корням, я использую это:

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

Может быть, не WC3, но отлично работает на всех браузерах, без HTML5/JQUERY/Javascript.

Приветствую Тома:)

Ответ 12

Казалось, это сработало для меня - во всех браузерах.

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

Ответ 13

Я думаю, что это сработает для вас. Но посетителей легко, если они получили что-то в считанные секунды, не тратя больше времени, и поэтому они снова будут посещать ваш сайт. <a href="file.zip" onclick="if (event.button==0) setTimeout(function(){document.body.innerHTML='thanks!'},500)"> Start automatic download! </a>

Ответ 14

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

У меня возникли проблемы с загрузкой PDF в IE10 + и была использована функция @dandavis ' download (https://github.com/rndme/download).

IE10 + нуждается в msSaveBlob.

Ответ 15

Надеюсь, это будет работать со всеми браузерами. Вы также можете установить время автоматической загрузки.

<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>

Демо здесь

Ответ 16

Хорошее решение jquery:

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

Вы даже можете установить другое имя файла для загрузки внутри тега <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>.

Ответ 17

Еще один:

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

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