2009-01-23 38 views
50

有人可以幫助我在Safari/Chrome中通過javascript調用打印IFrame的內容。如何在Safari/Chrome中打印來自JavaScript的IFrame

這在Firefox:

$('#' + id)[0].focus(); 
$('#' + id)[0].contentWindow.print(); 

這部作品在IE:

window.frames[id].focus(); 
window.frames[id].print(); 

但我不能得到任何Safari /鉻工作。

感謝

安德魯

+0

問候Andrew,有一個問題......它會自動在IE,Firefox中爲PDF文件顯示一個保存對話框。我如何抑制這一點。我嘗試使用JavaScript設置iframe的src,但它仍然顯示保存對話框 – 2011-12-04 09:42:04

回答

42

把打印功能在iframe和從父調用它。

的iframe:

function printMe() { 
    window.print() 
} 

父:

document.frame1.printMe() 
+6

您是如何獲得document.frame1的?我不得不用這個: document.getElementById('frame1')。contentWindow.printMe() – 2009-06-09 16:44:49

+2

使用NAME屬性,而不是ID。 – 2009-06-09 17:46:15

+2

它在IE8中不能正常工作。它正在打印所有內容(iframe之外)。請任何想法.. – DonX 2010-02-08 07:09:02

48

這裏是我完整的,跨瀏覽器的解決方案:

在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; 
} 

更新:許多人似乎是一種在,因爲我有這個問題發佈了IE的版本與此問題。我沒有時間 - 現在重新調查,如果你卡住了,我建議你閱讀這整個線索中的所有評論!

32

我使用了Andrew的腳本,但在printPage()函數被調用之前添加了一塊。 iframe需要焦點,否則它仍然會在IE中打印父框架。

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

不過謝謝你,這是安德魯寫的。我只是做了一個調整= P

4

使用Firefox window.frames也加入name屬性,因爲使用Firefox中的iframe中

IE:

window.frames[id] 

火狐:

window.frames[name] 

<img src="print.gif" onClick="javascript: window.frames['factura'].focus(); parent['factura'].print();"> 
<iframe src="factura.html" width="100%" height="400" id="factura" name="factura"></iframe> 
-4

使用這個:

window.onload = setTimeout("window.print()", 1000); 
3

有一點需要注意的是,如果您使用file:///在本地進行測試,它將無法在chrome上工作,因爲iframe中的函數將顯示爲未定義。但是,一旦在Web服務器上,它將工作。

8

除了Andrew和Max的解決方案,使用iframe.focus()導致打印父框架,而不是在IE8中只打印子iframe。改變該行固定它:

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

我不得不做出一些修改,以便在IE8(不與其他IE口味測試)

1)document.frames [參數]似乎使它接受數,而不是ID

printIframe(0, 'print'); 

function printIframe(num, id) 
{ 
    var iframe = document.frames ? document.frames[num] : document.getElementById(id); 
    var ifWin = iframe.contentWindow || iframe; 

    ifWin.focus(); 
    ifWin.printPage(); 

    return false; 
} 

2)我必須在網頁加載時顯示的打印對話框,也有一個鏈接「點擊這裏開始打印」(如果它沒有自動啓動)。爲了得到它的工作我不得不添加對焦()調用

<script type="text/javascript"> 
    $(function(){ 
    printPage(); 
    }); 

    function printPage() 
    { 
    focus(); 
    print(); 
    } 
</script> 
0

您可以在Chrome中使用

parent.frames['id'].print(); 

工作!

0

您還可以使用

top.iframeName.print(); 

parent.iframeName.print(); 
0

的 'framePartsList.contentWindow.print();'不工作在IE 11 ver11.0.43

因此我用 framePartsList.contentWindow.document.execCommand('print',false,null);