无法从 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 内容的主要内容,如果未能解决你的问题,请参考以下文章