2015-11-23 53 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); 

現在,通過/actions/print呈現的HTML是:

<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上不允許交互性,當打印模式從一個子窗口打開的父窗口(關閉打印對話框,而不是彈出,重新啓用互動)。

  • Win XP,IE11,Chrome和Firefox(全部在Win7上)的IE8始終允許與此相同的場景進行交互。

這使我相信這是OS X的限制或建議。在進一步的研究,這裏是我的developer.apple.com發現,證實了我的疑慮:

文檔 - 模式對話框阻止做任何特定的文檔內其他用戶。用戶可以切換到應用程序中的其他文檔和其他應用程序。 文檔模式對話框應該是,在使用文檔模式對話框(表格)中有描述。

當多個文檔可以在不同時間在單個窗口中出現時使用工作表。例如,選項卡式瀏覽器可以在不同的時間在單個窗口中顯示不同的文檔。在這種情況下,工作表適用於,儘管它僅適用於窗口中當前可見的文檔。由於用戶在同一個窗口中查看不同文檔之前必須實際關閉當前文檔,因此他們應首先解除表單

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