我正在尝试打印iframe内容。
contentWindow.focus();
contentWindow.print();
此代码适用于IE,Firefox和Safari。但不适用于Chrome和Opera。这些浏览器打印整个页面。
我尝试使用此主题How do I print an IFrame from javascript in Safari/Chrome。但它没有帮助我。
有人可以帮助我吗?
答案 0 :(得分:4)
这是Opera中的已知错误。除了上述解决方法的想法之外,您可能希望使用以下内容:
var clone=document.documentElement.cloneNode(true)
var win=window.open('about:blank');
win.document.replaceChild(clone, win.document.documentElement);
win.print();
我没有对此进行测试,但它应该在弹出窗口中创建页面的副本并打印它,而不必再次从服务器加载内容或丢失您可能想要打印的任何DOM修改。
答案 1 :(得分:2)
据我了解,如果不打开新窗口就无法实现iframe打印。
我的打印功能:
if ($.browser.opera || (/chrome/.test(navigator.userAgent.toLowerCase()))) {
var href = contentWindow.location.href;
href = href.indexOf("?") > -1 ? href + "&print=1" : href + "?print=1";
var printWindow = window.open(href, "printWindow", "scrollbars=yes");
printWindow.focus();
}
else {
contentWindow.focus();
contentWindow.print();
}
另外,我将以下代码添加到正文的末尾(当print == 1时):
<script type='text/javascript'>
function invokePrint() {
if (document.readyState && document.readyState!='complete')
setTimeout(function() { invokePrint(); }, 50);
else if (document.body && document.body.innerHTML=='false')
setTimeout(function() { invokePrint(); }, 50);
else {
focus();
print();
}
}
invokePrint();
</script>
答案 2 :(得分:1)
我无法使用Chrome重现您的问题。但是,在尝试仅打印iframe时,Opera确实仍会打印整个外页。
我已经设计了一种解决方法,虽然它确实起作用,但它不是100%故障保护(其中因为Opera包装线用于打印;我不知道在这种情况下如何计算正确的高度)。也就是说,以下代码至少是合理的(为方便起见使用jQuery):
if ($.browser.opera) {
var ifr = $('#youriframe');
var ifrbody = ifr.get(0).contentDocument.body;
var sheet = $([
'<style type="text/css" media="print">',
'body * {',
' display: none;',
'}',
'#youriframe {',
' border: none;',
' display: block;',
' height: ', ifrbody.scrollHeight, 'px;',
' margin: 0px;',
' padding: 0px;',
' width: ', ifrbody.scrollWidth, 'px;',
'}',
'<\/style>'
].join(''));
$('head').append(sheet);
window.print();
sheet.remove();
}
希望这有帮助。
答案 3 :(得分:0)
我尝试了上面的代码,在对上述代码进行更改后,我得到了结论性代码,如下所示
var win=window.open('about:blank');
win.document.write('<html><head></head><body>');
win.document.write('<iframe frameBorder="0" align="center" src="'+window.location.href+'" onload="test()" style="width: 619px; height: 482px;"></iframe>');
win.document.write('<scr'+'ipt>function test(){window.focus();window.print()}</sc'+'ript></body></html>');
win.document.close();
if (window.focus) {win.focus()}
尝试这个