2009-11-17 3 views
4

JavaScript, приведенный ниже код, имеет два шага.Как подождать location.href для завершения в JavaScript?

Шаг 1: перейдите в .pdf, .doc, .exe или что-то, что не является родным html. Если location.href занял окно браузера, то нет необходимости делать шаг 2. (PDF-файлы обычно берут окно браузера). Большинство других функций запускает процесс диспетчера загрузки. Например, .exe. Но есть некоторые вещи, такие как текстовые документы, которые могут быть загружены или показаны прямо в окне браузера в зависимости от настройки браузера. Я хочу, чтобы он сделал то, что сделал бы он.

Шаг 2: Если после этого процесс загружается с файлом, например, .exe, перейдите на главную страницу.

Или решение для ожидания всего 5 секунд между шагами 1 и 2, похоже, работает большую часть времени. Но при более медленном соединении это не всегда срабатывает. Затем он переходит на домашнюю страницу, не заканчивая первый вызов href.location, и они никогда не видят PDF-файл и не видят домашнюю страницу.

FYI ... Причина, по которой я обматываю их в setTimeOut, связана с этой проблемой firefox. Stack Overflow: 864633 assigning-to-document-location-href-without-clobbering-history

Мой вопрос: Есть ли способ рассказать, когда процесс location.href завершен?

<script language="JavaScript"><!-- 
function windowOnLoad() { 
    setTimeout(function(){ 
     location.href='/someurl/something.pdf'; //sometimes this is .doc file 
    },0); 
    setTimeout(function(){ 
     location.href='/homepage'; 
    },5000); 
    return false; 
} 
//--> 
</script> 
+0

У вас установлен PHP? – powtac

+0

Вы не сможете сделать это только с помощью javascript, если вы не используете ajax для отправки запроса. Прочтите это, это может помочь: http://stackoverflow.com/questions/1524487/browser-download-complete-event – Andrew

ответ

0

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

  • Ссылка на файл в всплывающем окне (браузеры должны нормально закрыть это сами, если единственное, что они находят это загружаемое файл) и в то же время перенаправления на страницу назначения
  • Построить в некоторой динамической функции, ссылки на страницу назначения и инициирует загрузку там, но это не может быть полезным в вашем случае

Чистый JavaScript это невозможно и туннелирование загрузку беспересадочный ugh серверный скрипт также не может обрабатывать переадресации. Вам придется идти с решением inbetween, я боюсь

2

Я не верю, что можно выполнить то, что вы просите в JavaScript. Когда вы устанавливаете что-то в window.location, вы в основном говорите браузеру, чтобы загрузить указанный url в текущем окне. Когда браузер делает это, весь код на предыдущей странице перестает работать.

Вот несколько возможностей из верхней части моей головы:

  • Загрузка внешнего файла во всплывающем окне или в новом окне. Я не пробовал это, поэтому не уверен, как это будет работать во всех браузерах.
  • Используйте любой язык на стороне сервера, который вы используете для работы с файлом. После этого вы сможете перенаправить клиента после того, как файл будет отправлен.
1

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

  1. на странице А, есть ссылка на страницу В
  2. на странице B, отобразить содержание, которое вы хотите, чтобы показать пользователям, пока файл загружается
  3. внутри элемента страницы B, добавьте META тег, который на самом деле начинает загрузку, то есть,

    <head> 
        <meta http-equiv="refresh" content="1;url=http://server.com/document.doc" /> 
    </head> 
    

Конечным результатом является то, что браузер продолжит показывать контент из (2), а также предложит пользователю сохранить загрузку с помощью диалогового окна «Сохранить как ...».

Многие сайты загрузки, такие как CNet и Sourceforge, используют аналогичную технику.

Смежные вопросы