2015-11-23 7 views
11

Mam scenariusz, w którym na mojej stronie robię window.open(), która otwiera kolejne okno, którego onLoad() wywołuje window.print(). W tym przepływie rodzic pozostaje niezmieniony, uniemożliwiając kliknięcie dowolnego łącza. Jak mogę uciec z tym problemem?Okno główne zawiesza się, gdy window.open uruchamia print onLoad

Na przykład:

strona HTML, posiada trzy linki: tworzyć, zarządzać i drukowania. Kod javascript dla łącza wydruku jest następująca:

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); 

teraz, HTML świadczonych przez /actions/print jest:

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

Więc jak widać, klikając na wydruku otworzy się nowe okno i wyzwala drukuj natychmiast. W tym stanie, kiedy wrócę do okna nadrzędnego z trzema łączami i spróbuję kliknąć inne linki, to nie działa i wydaje się zamrożone.

+1

@drew dziękuję. – Sripaul

+1

Możesz spróbować użyć limitu czasu? 'window.setTimeout (function() {window.print();}, 0);' Powiedz mi, czy to działa :) – www139

+0

@Sripaul Więc czy moja odpowiedź pomogła ci w jakikolwiek sposób? – redrum

Odpowiedz

15

Nie możesz rozwiązać tego problemu na OS X. Którego jestem pewien, że tylko testowane na.

Oto jak doszedłem do tego wniosku po przetestowaniu różnych przeglądarek i matryc.

  • Chrome, Safari i Firefox na OSX nie pozwalają interaktywność z okna nadrzędnego, gdy modalne druku została otwarta z oknem dzieci (zamknięcie okna dialogowego drukowania, ale nie pop-up, ponownie włączone interaktywność).

  • IE8 na Win XP, IE11, Chrome i Firefox (wszystkie na Win7) zawsze pozwalały na interaktywność z tym samym scenariuszem.

To doprowadziło mnie do przekonania, że ​​było to ograniczenie lub zalecenie OS X. Na dalszych badań, oto co znalazłem na developer.apple.com, potwierdzając moje wątpliwości:

dialogowe dokument-modal uniemożliwia użytkownikowi robić nic innego w obrębie danego dokumentu. Użytkownik może przełączyć się do innych dokumentów w aplikacji i do innych aplikacji. Dialogi modalne dokumentów powinny być arkuszami, które opisano w rozdziale Korzystanie z dialogów (arkuszy) dokumentowo-modalnych.

Użyj arkusza, gdy wiele dokumentów może pojawić się w jednym oknie o różnych porach. Na przykład: przeglądarka z zakładkami może wyświetlać różne dokumenty w jednym oknie w różnym czasie. Arkusz jest odpowiedni w tej sytuacji, nawet jeśli dotyczy tylko dokumentu, który jest aktualnie widoczny w oknie. Ponieważ użytkownicy muszą odrzucić bieżący dokument przed wyświetleniem innego dokumentu w tym samym oknie, powinni najpierw odrzucić arkusz.

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

Powiązane problemy