Я попробовал это и смог повторить проблему. Что я заметил, так это то, что при вызове функции печати iframe еще не загружен. Я проверил это, проверив значение innerHTML при вызове PrintIFrame (). Чтобы преодолеть это, вы можете использовать setTimeOut для повторного вызова функции через миллисекунды:
function PrintIframe() {
if (window.frames['myname'].innerHTML != "") {
window.frames['myname'].focus();
window.frames['myname'].print();
} else {
setTimeout(PrintIframe,1000);
}
}
Это сработало для меня
EDIT
Странно - в моем тестовом коде было предупреждение, которое, кажется, заставляет его работать. Когда я вынул его, это не сработало. Извините: (
В любом случае, это следует сделать с помощью 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>