【问题标题】:Bypass Printdialog in IE9在 IE9 中绕过打印对话框
【发布时间】:2012-06-17 15:53:05
【问题描述】:

hy 我正在寻找一种绕过 IE 9 中的 printdialog 的方法。我现在有一些适用于 ie 7/8 的方法,但它们在 ie9 对我不起作用

有人可以给我一个提示吗?

问候马库斯

【问题讨论】:

    标签: printing internet-explorer-9


    【解决方案1】:

    我真的只是想发表评论,但由于 IE 已经加速,因此应该将其包含在此处。为了获得多平台支持,我将它用于 javascript:

         function PrintWindow() {
    
            var isIE11 = !!navigator.userAgent.match(/Trident.*rv[ :]*11\./);
            if (navigator.appName == "Microsoft Internet Explorer" || isIE11== true) {
    
                var PrintCommand = '<OBJECT ID="PrintCommandObject" WIDTH=0 HEIGHT=0 ';
                PrintCommand += 'CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
                document.body.insertAdjacentHTML('beforeEnd', PrintCommand);
                PrintCommandObject.ExecWB(6, 2); PrintCommandObject.outerHTML = "";
                window.close();
    
            }
    
            else {
    
                  window.print();
            }
    
          }
    

    现在检查 IE 11。这是为 Microsoft 定义 userAgent 的一种新方法。还有其他articles关于这个。

    【讨论】:

      【解决方案2】:

      这里成功的关键组合似乎是在 onclick 事件中调用正确的函数(例如 Print() 而不是 window.print() ),以及在 IE9 中配置正确的安全设置(以及任何其他版本的 IE)。

      但是,如果通过受信任的安全 HTTPS 连接(具有受信任的 SSL 证书,而不是自签名的SSL 证书)。

      如果通过本地文件路径访问页面,则根本不起作用。如果您打算针对您无法控制浏览器的用户,请记住这两者,但是如果确实是这种情况,您可能最好完全使用另一种方法,使用诸如 Java 或要求用户安装本机操作系统软件,例如优惠券打印网站使用的。

      无论如何,通过适当的安全设置,IE9 应该允许您使用以下代码绕过打印对话框弹出窗口:

      <!DOCTYPE html>
      <html>
      <head>
          <title>Print Test</title>
          <script language="VBScript">
              sub Print()
                  OLECMDID_PRINT = 6
                  OLECMDEXECOPT_DONTPROMPTUSER = 2
                  OLECMDEXECOPT_PROMPTUSER = 1
                  call WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,1)
              End Sub
              document.write "<object id='WB' width='0' height='0' classid='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>"
          </script>
      </head>
      <body>
          <object id="WebBrowser1" width="0" height="0" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"> </object>
          <a href="#" onclick="Print()">Click Here to Print</a>
      </body>
      </html>
      

      这个确切的代码在 IE7、IE8 和 IE9 中对我有用。我还没有机会使用 IE10,但它也可能在那里工作。如果任何拥有 IE10 的人都可以测试,请务必报告。为获得最佳效果,请记住从托管源运行它,最好是受信任的 HTTPS 源,而不是在本地计算机上运行。

      这是我必须在 IE9 中配置的设置才能使上述代码正常工作。同样,它仅在从 Web 提供页面时才有效。它用更少的唠叨工作。如果我尝试直接从本地计算机加载相同的 HTML 文件,即使配置了相同的安全设置,它也不起作用。

      粉红色突出显示仅表示配置的此类设置不安全。注意:你也可以选择'prompt',它更唠叨,但被认为有点安全。

      【讨论】:

      • 我不确定,但考虑到 vbscript 中的 document.write(),看起来正文中的 标记是多余的。我把它拿出来了,它在 IE8 中仍然有效。
      • 我正在使用 IE 11 运行代码 sn-p,我发现单击正文中的锚点时未定义 Print() 函数。
      • 我的 IE 因此代码和如上所示设置的所有安全设置而崩溃。
      猜你喜欢
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 2010-10-01
      • 2015-07-05
      • 1970-01-01
      • 2017-03-10
      • 2013-06-15
      相关资源
      最近更新 更多