2015-11-23 3 views
11

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

Например:

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> 

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

+1

@drew спасибо. – Sripaul

+1

Можно использовать таймаут? 'window.setTimeout (function() {window.print();}, 0);' Скажите, если это работает :) – www139

+0

@Sripaul Итак, помог ли мой ответ вам? – redrum

ответ

15

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

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

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

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

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

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

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

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

Смежные вопросы