3

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

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

迎接马库斯

4

2 回答 2

11

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

但是,如果通过受信任的安全 HTTPS 连接(具有受信任的 SSL 证书而不是自签名 SSL 证书的连接)访问具有打印对话框绕过 ActiveX 控件的页面,则似乎不需要配置安全设置.

如果通过本地文件路径访问页面,它根本不起作用。如果您打算针对无法控制其浏览器的用户,请记住这两点,但是如果确实是这种情况,您可能最好完全使用另一种方法,使用 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 文件,即使配置了相同的安全设置,它也不起作用。

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

IE9 安全设置

于 2012-09-27T16:07:16.190 回答
0

我真的只是想发表评论,但由于 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 的一种新方法。还有其他关于此的文章

于 2015-09-12T02:32:48.707 回答