3

こんにちは、IE 9 で printdialog をバイパスする方法を探しています。ie 7/8 にはいくつかの方法がありますが、ie9 では機能しません。

誰かが私にヒントを教えてもらえますか?

マーカスに挨拶

4

2 に答える 2

11

ここでの成功の鍵となる組み合わせは、onclick イベントで適切な関数を呼び出すこと (window.print() ではなく Print() など) と、IE9 (およびその他のバージョンのIE)。

ただし、print-dialog-bypass ActiveX コントロールを含むページが、信頼できる安全な HTTPS 接続 (自己署名 SSL 証明書ではなく、信頼できる SSL 証明書を使用する接続) を介してアクセスされている場合、セキュリティ設定を構成する必要はないようです。 .

ページがローカル ファイル パス経由でアクセスされている場合、まったく機能しません。ブラウザを制御できないユーザーをターゲットにする場合は、これらの両方を念頭に置いてください。ただし、そのような状況が実際に当てはまる場合は、Java などのテクノロジーを使用するか、ユーザーにネイティブ OS のインストールを要求するなど、別のアプローチを使用することをお勧めします。クーポン印刷 Web サイトで採用されているソフトウェアなど。

いずれにせよ、適切なセキュリティ設定があれば、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 でも動作する可能性があります。IE10 を使用している人がテストできる場合は、報告してください。最良の結果を得るには、ローカル マシンではなく、ホストされているソース (できれば信頼できる HTTPS ソース) から実行することを忘れないでください。

上記のコードを機能させるためにIE9で構成する必要があった設定は次のとおりです。繰り返しますが、ページが Web から提供されている場合にのみ機能しました。しつこくなく動作しました。同じ HTML ファイルをローカル マシンから直接ロードしようとしても、同じセキュリティ設定が構成されていても機能しませんでした。

ピンクの強調表示は、構成されている設定が安全でないことを示しています。注: 'prompt' を選択することもできます。これはよりしつこいですが、ある程度安全であると考えられています。

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 に答える