我有一个简单的网页,其中1帧显示pdf,另一个显示菜单栏。
<iframe src="bar.html" name="menu" ></iframe>
<iframe src="doc.pdf" name="itempane" ></iframe>
使用chrome我可以从菜单栏导航到父级,然后返回到包含pdf的框架以便打印它
var pWindow = window.parent;
pWindow['itempane'].print();
尝试在IE11中执行相同操作会产生无效的调用对象错误。
您可以在http://www.abhrdev.co.uk/main.html
看到这一点我做错了什么/ IE做什么不同?
干杯
更新.....
我想我已经证明这不是一个javascript编码问题,但与IE中的pdf处理有关。使用以下页面
<a href="javascript:printFromMain('pdfpane');">Print PDF</a><br/>
<a href="javascript:printFromMain('htmlpane');">Print HTML</a>
<iframe src="bar_1.html" name="menu" ></iframe>
<iframe src="doc.pdf" name="pdfpane" ></iframe>
<iframe src="doc.html" name="htmlpane" ></iframe>
和这个功能
function printFromMain(paneName) {
var pWindow = window[paneName];
pWindow.focus();
pWindow.print();
}
html页面的打印工作但不是pdf pWindow.focus()给出了无效的调用对象 - 任何洞察为什么可能会收到很好的回复
答案 0 :(得分:1)
在尝试了几件事之后,我终于在IE11中使用了它:
1)使用object标签而不是iframe
2)直接在元素
上运行focus()/ print()3)超时后运行,以确保所有内容都已加载。可能有更好的方法(比如使用一些事件监听器)来执行此操作,因为超时时间需要相当长才能正常工作
setTimeout(function () {
var contentThingy = document.getElementById('itempane');
contentThingy.focus();
contentThingy.print();
}, 4000);
对象(具有指定的ID)而不是iframe:
<object id="itempane" ... ></object>
注意:不适用于chrome。其他答案中的其他变体之一(即使用ContentWindow)可以。
答案 1 :(得分:0)
尝试实际使用window.frames来获取frameList并通过框架名称引用它。
var pWindow = window.parent; //reference the parent from the iframe
var ifr = pWindow.frames.itempane; //get the pdf frame from the frame list
ifr.focus();
ifr.print();
答案 2 :(得分:0)
试试这个
<iframe src="bar.html" name="menu" ></iframe>
<iframe src="doc.pdf" ID="itempane" ></iframe>
var otherPane = parent.document.getElementById("itempane");
otherPane.focus(); // OR
otherPane.print(); // OR
var doc = otherPane.contentWindow || otherPane.contentDocument;
doc.focus();
doc.print();