Как запустить автоматическую загрузку файла в Internet Explorer?
-
03-07-2019 - |
Вопрос
Как инициализировать автоматическую загрузку файла в Internet Explorer?
Например, на странице загрузки я хочу, чтобы появилась ссылка для скачивания и сообщение:"Если загрузка не начинается автоматически....и т. д".Загрузка должна начаться вскоре после загрузки страницы.
В Firefox это легко, вам просто нужно включить метатег в заголовок: <meta http-equiv="Refresh" content="n;url">
где n — количество секунд и url
— это URL-адрес загрузки.Это не работает в Internet Explorer.Как заставить это работать в браузерах Internet Explorer?
Решение
ИсточникForge использует <iframe>
элемент с src=""
атрибут, указывающий на файл для загрузки.
<iframe width="1" height="1" frameborder="0" src="[File location]"></iframe>
(Побочный эффект:нет перенаправления, нет JavaScript, исходный URL-адрес остается неизменным.)
Другие советы
я ненавидеть когда сайты так сильно усложняют загрузку и используйте хаки вместо старой доброй ссылки.
Мертвая простая версия:
<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
цвет, не загружается повторно, если страница остается открытой после перезапуска браузера и т. д.
У меня была аналогичная проблема, и ни одно из вышеперечисленных решений мне не помогло.Вот моя попытка (требуется 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>
Это должно работать во всех случаях.
Недавно я решил эту проблему, разместив на странице следующий скрипт.
setTimeout(function () { window.location = 'my download url'; }, 5000)
Я согласен, что метаобновление было бы лучше, но если оно не сработает, что делать...
Простой бит 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
Это то, что я использую на некоторых сайтах (требуется jQuery).:
$(document).ready(function() {
var downloadUrl = "your_file_url";
setTimeout("window.location.assign('" + downloadUrl + "');", 1000);
});
Файл загружается автоматически через 1 секунду.
Я использовал это, кажется, работает и это просто 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>
ПРИМЕЧАНИЕ:это запускает тайм-аут в момент загрузки страницы.
Работает в Chrome, Firefox и IE8 и выше:
var link = document.createElement('a');
document.body.appendChild(link);
link.href = url;
link.click();
Я проверил и обнаружил, что он будет работать при нажатии кнопки, записывая событие onclick в тег привязки или кнопку ввода.
onclick='javascript:setTimeout(window.location=[File location], 1000);'
Обязательно отправьте файл без заголовок без кэша!У IE возникают проблемы с этим, если пользователь пытается «открыть» загрузку без предварительного сохранения.
Возвращаясь к истокам, я использую это:
<meta http-equiv="refresh" content="0; url=YOURFILEURL"/>
Возможно, не соответствует WC3, но отлично работает во всех браузерах, без HTML5/JQUERY/Javascript.
Привет Том :)
Еще :
var a = document.createElement('a');
a.setAttribute('href', dataUri);
a.setAttribute('download', filename);
var aj = $(a);
aj.appendTo('body');
aj[0].click();
aj.remove();
Кажется, это сработало для меня - во всех браузерах.
<script type="text/javascript">
window.onload = function(){
document.location = 'somefile.zip';
}
</script>
Я думаю, это подойдет вам.Но с посетителями легко, если они получили что-то за считанные секунды, не тратя больше времени, и, следовательно, они снова посетят ваш сайт.<a href="file.zip"
onclick="if (event.button==0)
setTimeout(function(){document.body.innerHTML='thanks!'},500)">
Start automatic download!
</a>
Для тех, кто пытается запустить загрузку с помощью динамическая ссылка сложно заставить его работать последовательно во всех браузерах.
У меня возникли проблемы с загрузкой PDF-файла в IE10+, и я использовал @dandavis' download
функция (https://github.com/rndme/download).
потребности IE10+ msSaveBlob
.
Я надеюсь, что это будет работать во всех браузерах.Вы также можете установить время автоматической загрузки.
<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>
Хорошее решение 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>.