无法从 IE 11 中的父页面打印 iframe 内容

Posted

技术标签:

【中文标题】无法从 IE 11 中的父页面打印 iframe 内容【英文标题】:Unable to print iframe content from parent page in IE 11 【发布时间】:2014-08-31 14:53:50 【问题描述】:

以下是我在 Windows XP 上的 IE 8 中运行良好的 javascript 代码。

<script type="text/javascript">
    function printFrame(frameId) 
       var iframe = $('#'+frameId)[0]; 
       iframe.contentWindow.focus(); 
       iframe.contentWindow.print(); 
    
</script

调用上述函数,然后在父页面中单击“打印框架”按钮。

<iframe id="testFrame" src="" name="testFrame"> </iframe>

<input type="button" onclick="printFrame('testFrame')" value="Print Frame"/>

最近,我将我的机器升级到了 Windows 7,将 IE 8 升级到了 IE 11。

现在同样的函数没有给出打印 iframe 内容的预期结果。 我在 chrome v34、firefox 30 中对此进行了测试。除了 IE 11 之外,这似乎适用于它们。

研究发现,动态设置iframe src时,iframe.contentWindow并没有返回异常的iframe窗口对象。

我尝试在 iframe 的 jsp 中使用 window.print()。如果 src 没有动态更改,这似乎可行。但是我需要根据父页面中另一个下拉框中的选择来更改 iframe 的内容以动态设置。

例如,在 IE 11 中查看以下链接。

http://plungjan.name/SO/testprintiframe.html

链接第一次在 iframe 上打印内容。然后,单击按钮。这导致父窗口被发送到打印机而不是 iframe 内容。

然后我尝试了另一种方法。 在 iframe 内容 jsp 中编写了以下代码,并尝试从父页面访问它。我无法访问该方法本身。 "iframe jsp 中的脚本代码"

<script type="text/javascript">
    function printFrame() 
       window.print();
    
</script

"父jsp中的脚本代码"

尝试1:

<script type="text/javascript">
    function printMyFrame(frameId) 
        var iframe = $('#'+frameId)[0]; 
        $(iframe).contents().printFrame();
    
</script

尝试2:

<script type="text/javascript">
    function printMyFrame(frameId) 
       setTimeout(function() 
          window.frames[frameId].contentWindow.printFrame();
        , 200);
     
</script>

我搜索并实现了几乎所有在谷歌搜索中找到的方法来访问 iframe 窗口而不是父窗口。但一直无法使用 IE 11 打印 iframe 内容。

请指导我如何在 IE 11 中打印 iframe 内容。

【问题讨论】:

【参考方案1】:

最近遇到类似问题,发现需要这个方法

var target = document.getElementById('print-container');
        try 
            target.contentWindow.document.execCommand('print', false, null);
         catch(e) 
            target.contentWindow.print();
        
         );

【讨论】:

我必须这样做 var result = iframe.contentWindow.document.execCommand("print", false, null); if (!result) iframe.contentWindow.print(); 才能在 FF 35.0.1 上正常工作【参考方案2】:

这对我有用,

这适用于 ie、chrome 和 firefox

var result = contentWindow.document.execCommand('print', false, null);

if (!result)
contentWindow.print();

【讨论】:

【参考方案3】:

这基本上是 jsFiddle 中上述答案 (Nayas Subramanian) 的重新散列 - 但安全性不允许它在 *** 100% 中工作...

$('#print').click(function ()

    var contentWindow = document.getElementById("frameContent").contentWindow;
    var result = contentWindow.document.execCommand('print', false, null);
    if(!result)  contentWindow.print();
);
iframe 
width:100%;
height:100%;
border: none;

#print 
position:absolute;
left:20px;
top: 20px;
font-size: 20px;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<iframe id="frameContent" name="frameContent" src="https://***.com/questions/24673024/unable-to-print-iframe-content-from-parent-page-in-ie-11#"></iframe>
<button id="print">Print</button>

【讨论】:

【参考方案4】:

看起来 iframe 无法在 IE11 上通过 javascript 打印。我尝试了几种方法,但都不成功。这个link 也是这么说的。

【讨论】:

@lexeme 我认为链接因升级到边缘而失效。搜索后我找到这个链接:developer.microsoft.com/en-us/microsoft-edge/platform/issues/…【参考方案5】:

以下代码在 IE 10 和 IE 11 中都适用于我

var browserName = navigator.userAgent.toLowerCase();
if ( browserName.indexOf("msie") != -1) 
    window.document.getElementById('pdfFrame').print();
 else if(browserName.indexOf("trident") != -1)  //IE 11
    window.document.getElementById('pdfFrame').contentWindow.document.execCommand('print', false, null);

【讨论】:

但是,这将在任何其他浏览器上完全失败。

以上是关于无法从 IE 11 中的父页面打印 iframe 内容的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 php、javascript 在 IE 上打印 iframe,而是打印当前页面,而不是其中有打印按钮

在 IE 中打印隐藏的 iFrame

在 IE 中打印 iframe

在 IE 中打印时 iframe 在底部切割

如何获取iframe的父窗口的body标签啊

求助:js,如何关闭IFRAME的父窗口