Каков наилучший кроссбраузерный способ открыть диалоговое окно загрузки (предположим, мы можем установить content-dision: attachment в заголовках) без перехода с текущей страницы или открытия всплывающих окон, что плохо работает в Internet Explorer (IE ) 6.
javascript
mkoryak
источник
источник
Content-Type: application/octet-stream
иContent-Disposition: attachment
.Этот javascript хорош тем, что не открывает новое окно или вкладку.
источник
Я всегда добавляю target = "_ blank" к ссылке для скачивания. Это откроет новое окно, но как только пользователь нажмет «Сохранить», новое окно закроется.
источник
Поместите это в раздел заголовка HTML, установив
url
переменную на URL-адрес загружаемого файла:Затем поместите это в тело, которое автоматически начнет загрузку через 5 секунд:
( Отсюда .)
источник
Я знаю, что вопрос был задан,
7 years and 9 months ago
но многие опубликованные решения, похоже, не работают, например, использование<iframe>
работает только сFireFox
и не работает сChrome
.Лучшее решение:
Лучшее рабочее решение для открытия всплывающего окна загрузки файла
JavaScript
- использоватьHTML
элемент ссылки, без необходимости добавлять элемент ссылки к,document.body
как указано в других ответах.Вы можете использовать следующую функцию:
В моем приложении я использую это так:
Рабочая демонстрация:
Показать фрагмент кода
Примечание:
link.download
атрибут, чтобы браузер не открывал файл в новой вкладке и не запускал всплывающее окно загрузки.источник
link
щелчке и скрыть ее после тайм-аута, используя этот код:,link.onclick = function() { document.body.innerText = "The file is being downloaded ..."; setTimeout(function() { document.body.innerText = ""; }, 2000); }
вы можете увидеть, как она работает в этом fiddle , но имейте в виду, что это не рекомендуемый способ, с ним лучше справились бы, если бы мы использовалиAjax
.iframe
увидеть этот ответ .Я искал хороший способ использовать javascript для инициации загрузки файла, как и предполагает этот вопрос. Однако эти ответы не помогли. Затем я провел небольшое тестирование xbrowser и обнаружил, что iframe лучше всего работает во всех современных браузерах IE> 8.
class="screenReaderText"
это мой класс для стилизации содержимого, которое присутствует, но не доступно для просмотра.css:
то же, что .visuallyHidden в html5boilerplate
Я предпочитаю это методу javascript window.open, потому что если ссылка не работает, метод iframe просто ничего не делает, а не перенаправляет на пустую страницу, говоря, что файл не может быть открыт.
источник
Использование API файла объектно-URL HTML5 Blob :
источник
URL.revokeObjectURL(url)
, когда файл больше не нужен для освобождения памятиИзменение местоположения окна может вызвать некоторые проблемы, особенно если у вас есть постоянное соединение, такое как веб-сокет. Поэтому я всегда прибегаю к старому доброму решению iframe.
HTML
Javascript
источник
Если ссылка ведет на действительный URL-адрес файла, просто назначьте window.location.href.
Однако иногда ссылка недействительна, и требуется iFrame.
Сделайте свой обычный event.preventDefault, чтобы предотвратить открытие окна, и если вы используете jQuery, это будет работать:
источник
После нескольких часов попыток функция родилась :) У меня был сценарий, когда мне приходилось отображать загрузчик вовремя, пока файл готовится к загрузке:
Работа в Chrome, Safari и Firefox
источник
Как насчет:
Этот способ работает во всех браузерах (я думаю) и позволяет вам разместить сообщение вроде: «Если загрузка не начнется через пять секунд, нажмите здесь».
Если вам нужно, чтобы это было с javascript ... ну ...
С уважением
источник
Для этой цели подойдет небольшой / скрытый iframe.
Таким образом, вам не нужно беспокоиться о закрытии всплывающего окна.
источник