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.