Скачать бинарный файл без запуска onbeforeunload - PullRequest
8 голосов
/ 16 марта 2010

Я хочу начать загрузку файла для пользователя, когда он щелкает ссылку, но у меня есть обработчик onbeforeunload, который я не хочу вызывать, когда начинается загрузка. Для загрузки у меня в настоящее время есть <a> с href, установленным в расположение файла, но при щелчке по нему onbeforeunload вызывается в Chrome (однако не в FF).

Я знаю, что могу установить частный флаг и проверить это в обработчике onbeforeunload, но есть ли способ начать загрузку с помощью ajax? Я все еще хочу, чтобы пользователь видел обычные диалоговые окна при загрузке файла (Открыть / Сохранить и т. Д.).

Идеи

Ответы [ 4 ]

11 голосов
/ 19 апреля 2011

Лучший способ сделать это - создать iframe и запустить загрузку оттуда.

Я проверил это в Chrome, IE6 + и Firefox, и этот подход работает во всех из них.

Пример кода:

function DownloadFile(filePath) {
    var downloadIframe = $('<iframe />', 
        {
            id    :    'downloadIframe'        
        }).appendTo('body');
    downloadIframe.attr('src', filePath);
}

Это будет работать правильно только для однократной загрузки (так как мы жестко закодировали идентификатор), если вы запускаете несколько загрузок, тогда я предлагаю вам повторно использовать iframe, сохраняя его в более широкой переменной. *

7 голосов
/ 14 ноября 2014

Добавьте атрибут download к тегу, который, по-видимому, предотвращает срабатывание onbeforeunload:

<a download href="mysite.com"></a>

С этот ответ .

4 голосов
/ 04 ноября 2010

Я знаю, что этот ответ действительно поздно, но есть простое решение. Динамически создавайте iframe и устанавливайте для него «src» в URL для загрузки через JavaScript. Это приведет к загрузке без запуска события выгрузки (я думаю).

4 голосов
/ 16 марта 2010

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

<a href="http://www.example.com/somefile.zip" target="_blank">download</a>

Не будет проверять (если не использует тип документа frameset), но он может работать. Он создаст новую вкладку или окно и затем загрузит файл (если заголовок http говорит, что должен), но может покинуть новые вкладки окна открыты, или он может закрыть их после сохранения ...

С другой стороны, я думаю, что с обработчиком onbeforeunload, который вы иногда не хотите вызывать, звучит подозрительно, зачем вам это все равно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...