我試過這個,並能夠複製這個問題。我注意到,當調用print函數時,iframe沒有完成加載。我在調用PrintIFrame()時通過檢查innerHTML的值來測試這一點。爲了克服這個問題,你可以使用的setTimeout再次x毫秒後調用的函數:
function PrintIframe() {
if (window.frames['myname'].innerHTML != "") {
window.frames['myname'].focus();
window.frames['myname'].print();
} else {
setTimeout(PrintIframe,1000);
}
}
這爲我工作
編輯 奇怪 - 我曾在我的測試代碼的警告,這似乎使這行得通。當我把它拿出來,它不起作用。對不起:(
無論如何,這應該使用jQuery的負載事件處理程序附加到IFRAME做到這一點我已經在IE8測試和它的工作原理:
<html>
<head>
<script language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
function loadiFrame(src)
{
$("#iframeplaceholder").html("<iframe id='myiframe' name='myname' src='" + src + "' />");
}
$(function()
{
$("#printbutton").bind("click",
function() {
loadiFrame('test.aspx');
$("#myiframe").load(
function() {
window.frames['myname'].focus();
window.frames['myname'].print();
}
);
}
);
});
</script>
</head>
<body>
<input type="button" id="printbutton" value="Load iFrame" />
<div id="iframeplaceholder"></div>
</body>
</html>
+ 1 for`contentWindow` – 2012-12-08 20:55:13