Инициирование загрузки файла, которое работает хорошо, даже в IE?

Я ищу еще несколько мыслей о том, как лучше всего начать загрузку файлов из Javascript.

Лучший способ начать загрузку? есть много хороших идей которые можно суммировать:

  • Установите src в iframe
  • Используйте window.location.replace ()
  • Используйте страницу с заголовком метаобновления
  • Используйте window.open ()
  • Позволяет серверу напрямую выводить файл, устанавливая Content-Type и Content-Disposition

Все эти подходы прекрасно работают для браузеров, с которыми я тестировал, за исключением IE8. С IE8 я получаю кучу проблем:

  • iframe не работает из-за файлов cookie, установленных в среде, которую я использую. Я думаю, мне нужно было бы разрешить заголовки P3P, чтобы решить эту проблему, но среда не позволяет мне устанавливать заголовки, поэтому P3P отсутствует
  • window.location.replace () работает за исключением того, что в IE8 адресная строка окна изменяется на URL-адрес файла, а нижнее окно остается пустым после открытия загруженного файла
  • Подход мета-обновления также работает, но все равно адресная строка меняет URL-адрес файла, а нижнее окно остается пустым после загрузки файла
  • Я отчаянно пытаюсь избежать window.open (), чтобы избежать проблем с блокировщиком всплывающих окон
  • Серверная среда, в которой я работаю, не позволит вам вывести сам файл, как вы могли бы, например, сделать, например, объект Response ASP.NET

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

Так же у кого-нибудь есть какие-либо другие предложения для начала загрузки в IE, где (1) нет всплывающих окон и (2) файл может быть сохранен или открыт и (3) не осталось пустого окна, (3) используя только Javascript, HTML и URL-адрес файла?

Денвер Майк

7 голосов | спросил Denver Mike 8 AMpWed, 08 Apr 2009 03:05:17 +040005Wednesday 2009, 03:05:17

1 ответ


0

Обычный шаблон страницы загрузки (если он у вас есть; лично я их ненавижу):

<script type="text/javascript">
    window.onload= function() {
        window.location= document.getElementById('downloadlink').href;
    }
</script>
<p>
    Your download will begin shortly. If it doesn't,
    <a id="downloadlink" href="file.zip">click here</a>.
</p>

Или то же самое с мета-обновлением вместо сценария. В любом случае должен вести себя примерно одинаково.

  

Подход мета-обновления также работает, но адресная строка по-прежнему изменяется на URL-адрес файла, и основное окно остается пустым после загрузки файла

Этого не должно быть. Есть ли онлайн версия, которую можно протестировать? Обычно, когда браузер принудительно загружает файл любым обычным способом (щелчок по ссылке, location.href, meta-refresh), он должен сохранять предыдущую страницу на экране.

  

среда не позволяет мне устанавливать заголовки, поэтому P3P отсутствует

Вам не нужно использовать заголовки для установки политик P3P, HTML <link> тег работает так же хорошо:

<link rel="P3Pv1" href="/policy.p3p" />

Но зачем тебе это? Если целевой URL-адрес просто обслуживает файл, устанавливать куки-файл вообще не нужно, так зачем использовать P3P?

  

Я отчаянно пытаюсь избежать window.open (), чтобы избежать проблем с блокировщиком всплывающих окон

Если вы используете window.open () в ответ на щелчок пользователя, проблем с блокировщиком всплывающих окон нет.

Не обязательно открывать всплывающее окно, чтобы в любом случае загрузить файл. Я начинаю думать, что в месте назначения загрузки файлов, на которое вы ссылаетесь, есть что-то очень странное - как будто это вовсе не загрузка файлов, а какое-то странное веб-приложение HTML. Ссылка на скачивание не сложно, вы просто ссылаетесь на файл, работа выполнена; кажется, ты делаешь это намного сложнее, чем есть на самом деле.

Единственная обычная проблема, связанная с простой ссылкой на файл, заключается в том, что если он содержит текст, HTML, XML или изображение, браузер будет отображать его встроенным, а не загружать. Единственный способ победить это - использовать заголовок «Content-Disposition: attachment», либо отправив его через скрипт, который устанавливает этот заголовок, либо сконфигурировав веб-сервер для отправки этого заголовка для всех загрузок файлов. Если вы не можете выполнить ни одного из этих действий в своей серверной среде, решения не существует.

ответил bobince 8 PMpWed, 08 Apr 2009 13:51:55 +040051Wednesday 2009, 13:51:55

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132