【问题标题】:Javascript .print() Failing with IE11 for type application/pdfJavascript .print() IE11 类型 application/pdf 失败
【发布时间】:2013-12-02 12:49:36
【问题描述】:

我已经制作了一个我在我的网站上使用了一段时间的代码示例,现在从 IE11 和 Windows 8.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>

我发现 this article 谈到了类似的事情,但我自己无法将其用作修复。

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

在调试模式下我收到错误object doesn't support property or method 'print'

我知道self.print() 可以工作,但我不确定如何将其调整到此代码中以打印 pdf 而不是整个 html 页面。有没有其他方法可以解决这个问题?

【问题讨论】:

    标签: javascript html printing compatibility internet-explorer-11


    【解决方案1】:

    如果我错了,请纠正我,但 &lt;object&gt; 元素似乎没有 print() 方法。我猜它在早期的 IE 中起作用的原因是因为他们没有提供太多关于标准的信息,但现在他们倾向于更接近标准,因此他们可能已经放弃了他们的自定义打印方法。

    但是,您有很多选择:

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

    也可以看看thesediscussions

    【讨论】:

    • 1.如何?我引用的是 .pdf 文件,而不是第 2 页。如何?我引用的是 .pdf 文件,而不是第 3 页。iFrame 会导致同样的问题。我要做的就是在 iframe/object 中调出包含 pdf 的打印对话框窗口
    【解决方案2】:

    虽然这是一个相当古老的问题,但这里有一个非常有效的解决方案。使用 IE11 v11.1039.17763.0(在 IE10 模式下)、Google Chrome v80.0.3987.132、MS Edge v44.17763.831.0 和 MS Edge(在 Chromium 上,测试版)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>
    

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

    【讨论】:

      猜你喜欢
      • 2018-09-11
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 2015-06-16
      相关资源
      最近更新 更多