在ie11中使用pdf进行javascript框架导航

时间:2014-09-16 14:05:53

标签: javascript pdf internet-explorer-11 frames

我有一个简单的网页,其中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()给出了无效的调用对象 - 任何洞察为什么可能会收到很好的回复

3 个答案:

答案 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();