我想打印iframe中的内容。
contentWindow.focus();
contentWindow.print();
此代码在IE,Firefox和Safari。 但是,不要在Chrome和Opera的工作。 这些浏览器打印整个页面。
我试图用这个话题如何打印一个IFrame从Safari /铬的JavaScript 。 但它并没有帮助我。
可能有人帮助我吗?
我想打印iframe中的内容。
contentWindow.focus();
contentWindow.print();
此代码在IE,Firefox和Safari。 但是,不要在Chrome和Opera的工作。 这些浏览器打印整个页面。
我试图用这个话题如何打印一个IFrame从Safari /铬的JavaScript 。 但它并没有帮助我。
可能有人帮助我吗?
这是在Opera一个已知的bug。 除了寻求解决方法上面的想法,你可能想的是这样玩:
var clone=document.documentElement.cloneNode(true)
var win=window.open('about:blank');
win.document.replaceChild(clone, win.document.documentElement);
win.print();
我没有测试过这一点,但它应该在弹出窗口中创建的页面的副本,并打印出来,而不必从服务器加载内容的第二次或失去你可能想打印任何DOM修改。
据我所知,这是不可能实现的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();
}
还添加以下代码到主体的端部时(当打印== 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>
我不能使用Chrome重现您的问题。 歌剧,但是,确实还试图只打印了iframe打印时整个外页。
我设计了一个解决方法,虽然它的工作主要是,它不是100%,故障安全(因为歌剧包装印刷线除其他外,我不知道如何计算在这种情况下,正确的高度)。 这就是说,下面的代码工作至少是合理的(使用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();
}
希望这可以帮助。
我想上面的代码,并在更改上面的代码后,我带着确凿的代码如下
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()}
试试这个