Подтвердить что ты не робот

Родительское окно зависает, когда window.open запускает печать onLoad

У меня есть сценарий, где на моей веб-странице я делаю window.open(), который открывает другое окно, чей onLoad() вызывает window.print(). В этом потоке родительский window остается замороженным, не разрешая ссылки, на которые нужно нажать. Как мне избежать этой проблемы?

Например:

Страница HTML содержит три ссылки: создание, управление и печать. Код javascript для ссылки на печать выглядит следующим образом:

    var url = '/actions/print/';
    var win = window.open(url,"Title_","resizable=yes,scrollbars=yes,directories=no,titlebar=no,location=no,status=no,menubar=no,width="+width+",height="+height);

теперь HTML, отображаемый /actions/print:

<html><body onload="window.print();"> ... Content goes here ...</body></html>

Итак, как вы можете видеть, нажатие на печать открывает новое окно и запускает печать сразу. В этом состоянии, когда я возвращаюсь в родительское окно с тремя ссылками и пытаюсь щелкнуть по другим ссылкам, он не работает и выглядит замороженным.

4b9b3361

Ответ 1

Вы не можете решить эту проблему в OS X. Я уверен, что вы только тестировали.

Вот как я пришел к такому выводу после тестирования на разных браузерах и форматах.

  • Chrome, Safari и Firefox в OS X не разрешили интерактивность с родительским окном, когда из дочернего окна было открыто print modal (закрытие диалогового окна печати, но не всплывающее окно, повторная интерактивность).

  • IE8 в Win XP, IE11, Chrome и Firefox (все на Win7) всегда допускали интерактивность с этим же сценарием.

Это заставило меня поверить, что это ограничение или рекомендация OS X. О дальнейших исследованиях, вот что я нашел на developer.apple.com, подтвердив свои сомнения:

Диалоговое диалоговое окно документа не позволяет пользователю делать что-либо еще в определенном документе. Пользователь может переключиться на другие документы в приложении и в другие приложения. В диалоговых окнах документа должны быть листы, которые описаны в разделе "Использование диалоговых окон документа (мода)".

Используйте лист, когда несколько документов могут отображаться в одном окне в разное время. Например, браузер с вкладками может отображать разные документы в одном окне в разное время. В этой ситуации подходит листок, хотя он применяется только к документу, который в настоящее время отображается в окне. Поскольку пользователи должны фактически отменить текущий документ перед просмотром другого документа в том же окне, они должны сначала удалить лист.

https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/OSXHIGuidelines/WindowDialogs.html

Ответ 2

Вы нашли решение этой проблемы?