Какое событие JS происходит, когда Chrome получает загружаемый файл? - PullRequest
16 голосов
/ 25 мая 2011

У меня проблема с событием onLoad для iframe в Google Chrome.Я создал iframe и установил значение для его атрибута "src", чтобы получить файл с сервера.Во время обработки сервером отображается окно ожидания, пока клиент не получит возвращенный файл.Я пытался использовать событие onLoad iframe, чтобы определить, когда клиент получает файл для отключения этого окна ожидания, но в Google Chrome этот обработчик событий не работает.
В Firefox, когда клиент получает файл, «Сохранить в«всплывающее окно будет отображаться автоматически, и событие« загрузка »будет запущено, но этого не происходит в Chrome.
Не могли бы вы рассказать, как решить эту проблему?Большое вам спасибо!

Ответы [ 3 ]

15 голосов
/ 06 июня 2011

Я столкнулся с этой проблемой.Оказывается, Chrome не вызывает абсолютно никаких событий в iframe при загрузке файла.

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

5 голосов
/ 07 января 2014

Я столкнулся с той же проблемой, и в конечном итоге я использовал этот плагин: http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/

Он основан на той же концепции, что и Морган, прост в использовании и отлично работает.

1 голос
/ 04 июля 2012

Я обошел эту проблему, установив cookie (done = 0), когда страница, на которой будет установлен iframe, использую javascript, чтобы перетащить iframe на страницу, и изменил значение этого cookieкогда исходный скрипт iframe выполняется успешно (done = 1).

Затем я использовал простой вызов ajax с settimeout для возврата значения cookie, когда значение равно 1, я могу вызвать событие onload (то естьработает для всех остальных браузеров).

...