IE9, Загрузки, Закрытие всплывающего окна
Итак, в моем приложении пользователь может экспортировать свою работу в excel.
Он работает, открывая всплывающее окно (window.open(...)
), которое затем родитель записывает данные в форму, а затем отправляет форму обратно на сервер.
Сервер создает файл и передает его обратно во всплывающее окно, где появляется диалоговое окно загрузки. Он также пишет файл cookie с токеном.
Этот токен уникален для каждого всплывающего окна загрузки, и когда окно видит этот файл cookie (регулярно проверяя), он закрывается с помощью window.close()
, когда пользователь получил запрос на загрузку файла.
Это отлично работает в IE7 и IE8
Однако, поскольку IE9 решил избавиться от диалогового окна и заменить его инфобаром, окно закрывается, прежде чем пользователь сможет предпринять действия для загрузки, и если они нажмут на него, они никогда не узнают, когда это произойдет, не открывая загрузки вручную.
В качестве временного решения всплывающее окно больше не закрывается.
Тем не менее, я хочу, чтобы иметь возможность закрыть его для пользователя, как только их загрузка начала полностью бесполезно для них.
Как я могу закрыть это окно и все еще иметь возможность предупредить пользователя в IE9, что их загрузка завершена и может быть открыта?
Ответы
Ответ 1
Я сделал что-то подобное недавно. Мое решение состояло в том, чтобы избавиться от window.open
и вместо этого использовать Content-Disposition
, чтобы заставить браузер загружать документ, а не открывать его.
Измените код сервера, чтобы вставить этот HTTP-заголовок перед созданием документа Excel, а затем изменить все кнопки загрузки/ссылки на обычные ссылки, например <a href="server/document">Download the report as Excel</a>
Content-Disposition: attachment; filename=someFilename.xls
EDIT: Извините, я пропустил часть с пятиминутным временем рендеринга.
Вы все равно можете использовать Content-Disposition для этого только с тире Javascript. Сообщите серверу, когда документ сгенерирован. Затем просто закройте окно, открытое window.open
, и в главном окне загрузите документ с заголовком Content-Disposition.
Ответ 2
Используйте iframe - они работают намного лучше, и у вас больше контроля. Просто установите display: none;
Ответ 3
Вы можете сделать комментарий HTML, чтобы ваша строка, которая закрывает ваше всплывающее окно, влияет только на браузеры, которые не являются IE9... http://www.unintentionallyblank.co.uk/2006/09/19/if-internet-explorer-then-do-something-else-a-how-to/
<!--[If lt IE 9]>
<script>
//your code here
</script>
<![endif]-->
Должен работать. Это, если все версии IE до 9 сделают script, вы поместите внутри него. Это должно быть в части HTML.