繁体   English   中英

如何在iframe中打印特定内容

[英]How do print specific content inside the iframe

<script type="text/javascript">
function printDoc() {
   document.getElementById("frame_singleCheque").contentWindow.print();
}
</script>

<iframe  style ="height:400px; width: 750px; overflow:scroll;"  id="frame_singleCheque" src="http://www.w3schools.com"></iframe>
<input type="button" id = "btnCPrint" value = "Print" onclick="javascript:printDoc()" />

错误

[16:41:44.054] Error: Permission denied to access property 'print' @ http://localhost/pdf/print.php:3

我已经验证了很多用于打印iframe内容的堆栈建议线程。 但对我来说,那些没有用。

正好在上面的代码只出现在我的print.php文件中。 我想打印iframe内容。

另外我想知道,如何打印iframe中存在的特定div。 此iframe中的示例“class ='example_code notranslate'”。

您可以通过将跨域iframe嵌套在本地托管的iframe中来完美地打印跨域iframe页面。 一个“代理iframe”。

通过这种方式,父javascript可以打印代理iframe而不会出现问题,因为它是本地的,它将传递打印来自另一个域的内部iframe。

这项技术有效并且已由我自己验证。

在您的容器页面中,像这样托管iframe

 <iframe id="printf" name="printf" class="A4" src="/SomeController/IFrameProxy?url=TARGETURL"></iframe>

代理iframe看起来应该像这样

        @model string
        <html>
            <head>
                <title>IFrame Proxy</title>
                <style>
                    html, body, iframe {
                        height: 100%;
                        width: 100%;
                        margin: 0;
                        padding: 0;
                        border-style: none;
                    }
                </style>

            </head>
            <body>
                <iframe src="@Model" seamless></iframe>
            </body>
        </html>

打印iframe(在容器页面上定义)的javascript应如下所示:

        function printFrame() {
            var frm = document.getElementById("printf").contentWindow;
            frm.focus();// focus on contentWindow is needed on some ie versions
            frm.print();
        }

看起来你在这里有一个非常标准的跨域iframe问题 - 即浏览器的设计使你无法做到这一点。 我可以提出很多捏造,但很大程度上,iframe是解决这个问题的错误方法。

基本上,最好的办法是刮掉页面 - 发出http请求并解析出你想要的内容。 然后,您可以将其作为您自己页面的DOM的一部分进行交互。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM