элегантное решение для автоматической загрузки

В настоящее время я использую мета http-equiv='Refresh' для автоматического запуска загрузки PDF. однако это по-разному влияет на каждый из браузеров.

Основная проблема связана с IE (6 и 7): когда пользователь перенаправляется на PDF-файл, если пользователь нажимает кнопку «Назад», он отправляется обратно на страницу, которая инициировала загрузку, а затем снова быстро перенаправляется на PDF-файл.

Firefox в Windows имеет лучший эффект, но все еще не идеален, пользователь попадает на страницу загрузки и перенаправляется на PDF-файл. Однако, если они используют кнопку «Назад», они полностью пропускают страницу загрузки.

В настоящее время Firefox в Linux имеет именно тот эффект, который мне нужен. Поскольку страница загрузки перенаправляет вас на PDF-файл, а кнопка «Назад» из PDF-файла отправляет вас обратно на страницу загрузки, и вы остаетесь там.

Я попытался использовать функцию javascript setTimeout() для задержки всплывающего окна PDF, однако задержка не работает ни в одном браузере, а всплывающее окно не работает в IE7.

Кто-нибудь реализовал элегантное решение проблемы, которое я мог бы использовать?

Заранее спасибо за вашу помощь


person Braddle    schedule 10.02.2009    source источник


Ответы (4)


Реферер

Вы можете проверить реферера:

if (document.referrer != "http://homepage.com/file.pdf") {
    // go to the file
}

Это немного сложнее, потому что вам нужно сравнить с абсолютным URL-адресом реферера, но это не должно быть проблемой.

Печенье

Вы можете установить файл cookie при первом входе на страницу загрузки. Если файл cookie установлен (для каждого файла другая запись в файле cookie), вы не должны перенаправлять.

Недостатком является то, что если кто-то перезагрузит страницу (потому что он хочет увидеть файл во второй раз), он больше не сможет получить доступ к файлу. Вокруг него есть несколько возможностей:

  • Установите временную метку, срок действия которой истекает в файле cookie.
  • Добавьте ссылку на страницу, по которой пользователь может перейти вручную.

Установка/получение куки:

if (document.cookie && document.cookie == "I was here!") {
    alert(document.cookie);
} else { // set a cookie
    document.cookie = "I was here!";
}

Javascript может перенаправлять так:

window.location.href = "http://www.google.com";
person Georg Schölly    schedule 10.02.2009
comment
это означает, что если вы действительно хотите открыть документ более одного раза, он не будет отображаться (вы видели его один раз!). - person tpk; 13.02.2009

использовать всплывающее окно javascript

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

person tpk    schedule 13.02.2009

Если я правильно понял, что вам нужно, вы хотите сделать что-то вроде поведения файловых ресурсов: пользователь ждет несколько секунд со счетчиком, и по истечении времени ожидания вы перенаправляете его на страницу, с которой начинается загрузка.

Может быть, вам следует просто показать ссылку на страницу загрузки вместо перенаправления? Эта страница должна отправлять заголовки «force-download», чтобы избежать навигации по ней браузером. Если кто-то попытается получить доступ к этой странице напрямую - проверьте реферер или заголовки или любую другую защиту, которую вы можете себе представить (например, динамические ссылки), возможно, она у вас уже есть.

Это решение позволит вам избежать магии JS и без проблем сделает ваш код кроссбраузерным.

person Sergey Galashyn    schedule 13.02.2009

Вы можете добавить iframe в DOM через javascript с src, установленным на URL-адрес, который вы хотите загрузить. Браузер вообще не изменит страницу, просто начнется загрузка. Его можно скрыть с помощью CSS, и пользователь даже не узнает, что он там есть.

person joegester    schedule 09.07.2009