类型application/pdf的Javascript.print()与IE11一起失败

类型application/pdf的Javascript.print()与IE11一起失败,javascript,html,printing,compatibility,internet-explorer-11,Javascript,Html,Printing,Compatibility,Internet Explorer 11,我已经做了一个我在我的网站上使用了一段时间的代码示例,现在在IE11和Windows8.1上运行时出现了问题 问题是当调用javascript方法.Print()时,打印窗口不会弹出 <html> <head></head> <body onload="window.document.getElementById('PDFDoc').print();"> <object id='PDFDoc' name='PDFDoc' type=

我已经做了一个我在我的网站上使用了一段时间的代码示例,现在在IE11和Windows8.1上运行时出现了问题

问题是当调用javascript方法.Print()时,打印窗口不会弹出

<html>
<head></head>

<body onload="window.document.getElementById('PDFDoc').print();">
    <object id='PDFDoc' name='PDFDoc' type='application/pdf' data='Hello World.pdf' height="369" width="266" style="border-width:thin;border:#CCCCCC" >
</object>
</body>
</html>

我发现它谈论了一些类似的东西,但我自己却无法用它来修复

PS:我本来会上传Hello World pdf,但stackoverflow不允许我上传,所以只需使用任何pdf复制错误

在调试模式下,我发现错误
对象不支持属性或方法“print”


我知道,
self.print()
可以工作,但我不确定如何将其应用到这段代码中,以打印pdf而不是整个html页面。有其他方法吗?

如果我错了,请纠正我,但是
元素似乎没有方法。我想这在早期IE中起作用的原因是,他们对标准没有给出太多,但现在他们倾向于更接近标准,因此他们可能已经放弃了定制的打印方法

然而,你有很多选择:

  • 隐藏您不想打印的所有内容并调用window.print()
  • 创建print.css样式表
  • 您可以创建一个
    元素并将您的元素附加到那里,然后在该iframe上调用print

  • 另请看。

    尽管这是一个非常老的问题,但这里有一个非常好的解决方案,它确实有效。使用IE11 v11.1039.17763.0(在IE10模式下)、Google Chrome v80.0.3987.132、MS Edge v44.17763.831.0和MS Edge(在Chrome上,测试版)v81.0.416.20进行测试,均在Win10下进行

    此解决方案直接打开带有给定pdf文件的浏览器的“打印”对话框

    <object id="objectPdf" data="my.pdf" type="application/pdf" width="1" height="1">
      alt : <a href="my.pdf">my.pdf</a>
    </object>
    
    <iframe id="iFramePdf" src="my.pdf" style="display:none;"></iframe>
    
    <input type="button" value="Print PDF" onclick="printTrigger();" />
    
    <script type="text/javascript">
     function printTrigger() {
        try {
            document.getElementById('objectPdf').printWithDialog();
        } catch(e) {
            document.getElementById('iFramePdf').contentWindow.print();
        }
     }
    </script>
    
    
    中高音:
    函数printTrigger(){
    试一试{
    document.getElementById('objectPdf').printWithDialog();
    }捕获(e){
    document.getElementById('iFramePdf').contentWindow.print();
    }
    }
    

    请注意,提供的解决方案的性能很差,因为它会启动三个而不是一个HTTP请求

    一,。怎么用?我引用的是.pdf文件,不是第2页。怎么用?我引用的是一个.pdf文件,不是第3页。iFrame会导致相同的问题。我所要做的就是在iframe/object中打开包含pdf的打印对话框窗口