2010-07-15 265 views
8

我的網站有一個「打印此頁」按鈕。Safari:在打印Iframe時阻止兩個打印對話框

我將靜態打印模板HTML文件加載到隱藏的iframe中,使用jQuery將HTML複製到該頁面中,並從Iframe頁面調用window.print()。一切都很好,除了Safari,它也想打印父框架,所以我打開兩個打印對話框。

我已經嘗試從iframe中調用window.print,並從父對象調用iframe(document.printFrame.window.print()),但我無論如何都得到兩個對話框。

有沒有人知道解決這個問題的方法?我只想打印Iframe,而不是父級。

回答

1

我無法重現該錯誤;它適用於我(即:我只有一個打印對話框),無論我是否從iframe或父框架調用它。也許你在某處調用window.print()兩次?

我在Mac OS X上運行的Safari 4.0.3 10.6

編輯:這就是:http://jsfiddle.net/Kq9dc/

編輯2:我只是測試這在Safari 5.0/Windows 7和它工作正常。你確定它不是你的代碼中的其他東西嗎?

編輯3:只要在WinXP測試了這個在Safari上的幾個版本:

Safari 3.0 (first beta): Not working (no print dialog) 
Safari 3.1 (first non-beta): Works fine 
Safari 4.0: Works fine 
Safari 5.0: Works fine 
+0

如果我調用它兩次,我希望在其他瀏覽器上有相同的行爲。嗯... – 2010-07-19 13:18:15

+0

@Diodeus你得到2打印對話框與我的[小提琴](http://jsfiddle.net/Kq9dc/)? – quantumSoup 2010-07-19 15:02:47

+0

@Diodeus更多測試,他們似乎工作正常 – quantumSoup 2010-07-19 17:34:43

0

試試這個。把這個說的iframe:

function printPage() { print(); } 

然後是在父:

function printIframe(id) 
{ 
    var iframe = document.frames ? document.frames[id] : document.getElementById(id); 
    var ifWin = iframe.contentWindow || iframe; 
    iframe.focus(); 
    ifWin.printPage(); 
    return false; 
} 

如果這也不行,我想嘗試開闢一個新窗口/標籤,並用HTML打印填充。

var printwin = window.open("about:blank", "_new"); 
printwin.document.open(); 
printwin.document.write("HTML goes here..javascript which is going to print is in there too.."); 
printwin.document.close(); 

兩個小事情需要注意的是

  • 在新窗口拆分</script>,這樣你就不會過早地終止
  • 使用的setTimeout()的onLoad後執行()已完成,否則Firefox用戶可能會在打印對話框下看到一個空白頁面