如何在 iPad 上使用 Javascript 打印 iFrame 的内容?
打印 iFrame 的内容似乎已经成为跨浏览器解决的一个具有挑战性的问题。在测试了很多方法(其中一些也可以在这个网站上找到)之后,我当前的方法似乎在跨浏览器上运行得很好,如下所示:
function printUrl( elem, url ) {
$( '#' + elem ).append( "<iframe style='border: none; width: 0; height: 0; margin: 0; padding: 0;' src='" + url + "' id='printFrame'></iframe>" );
$( '#printFrame' ).load( function() {
var w = ( this.contentWindow || this.contentDocument.defaultView );
w.focus();
w.print();
} );
}
使用 iPad 时,此代码只有一个小问题。 iPad 打印包含 iFrame 的页面,而不是 iFrame 的内容。不过,Mac 上的 Safari 可以正确打印 iFrame 的内容。
有人已经解决了这个问题并能够在 iPad 上打印 iFrame 的内容吗?
Printing the contents of an iFrame already seemed a challenging problem to solve cross-browser. After testing a lot of approaches (some of which also found on this site), my current approach seems to work quite good cross-browser and looks like this:
function printUrl( elem, url ) {
$( '#' + elem ).append( "<iframe style='border: none; width: 0; height: 0; margin: 0; padding: 0;' src='" + url + "' id='printFrame'></iframe>" );
$( '#printFrame' ).load( function() {
var w = ( this.contentWindow || this.contentDocument.defaultView );
w.focus();
w.print();
} );
}
There is only a slight problem with this code when using an iPad. The iPad prints the page which contains the iFrame, instead of the contents of the iFrame. Safari on Mac correctly prints the contents of the iFrame, though.
Has anyone already solved this problem and been able to print the contents of an iFrame on an iPad?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
好吧,首先。我没有解决问题。我创建了一个解决方法,实际上伪造了我想要实现的目标。
因为 iPad / iPhone 简单地打印父页面,所以我将完整的正文包装在一个新的 div 中,然后附加 iFrame 和一些样式表,以确保打印的文档仅包含 iFrame:
在普通视图中隐藏浏览器的 iframe使用绝对定位完成,使用无显示或可见性隐藏在最终打印中引入了奇怪的行为。
是的,它很丑。然而,这是目前我能想到的唯一可行的选择。如果你们中有人提出更好的解决方案,请告诉我。
Okay, first of all. I did not solve the problem. I created a work-around that actually fakes what I want to achieve.
Because the iPad / iPhone simple prints the parent page, I wrap the complete body in a new div, then append the iFrame and some stylesheets which make sure that the printed document only contains the iFrame:
Hiding the iframe for the browser in the normal view is done using absolute positioning, using display on none or visibility hidden introduced weird behavior in the final print.
Yes, it's ugly. However, this is currently the only option I can think of which works. If any of you come up with a better solution, please let me know.
这是一个在常青浏览器和当前版本的 iOS 上跨平台工作的函数:
这是基于这个答案小修改(重要的是,必须删除
document.body.removeChild(frame1);
行才能在 iOS 上打印。)Here's a function that works cross-cross platform on evergreen browsers and the current versions of iOS:
This is based on this answer with minor modifications (Importantly the line
document.body.removeChild(frame1);
had to be removed to allow for printing on iOS.)我使用了 @d13 答案并做了一些修改。因为
window.frames["frame1"]
不是有效的对象。 window.frames 是一个类似数组的对象。MDN 文档:
所以我使用了以下方法:
I used @d13 answer with a little bit modification. because
window.frames["frame1"]
is not a valid object. window.frames is an array like object.MDN Docs:
So I have used below method: