打印 window 被浏览器弹出窗口阻止程序阻止

Print window blocked by browser popup blocker

我正在尝试显示一个打印对话框,用户可以在其中通过按钮控件打印发票。此代码的主要部分是 javascript 但我注意到当我单击打印按钮时,(在 4 台不同的电脑上)google chrome 中的弹出窗口阻止程序完全阻止了打印页面。在我允许弹出窗口后它工作正常但客户不得不不断说允许弹出窗口是不方便的。我查找了另一个选项,据说 window.createPopup 可以绕过浏览器弹出窗口拦截器但使用 window 限制。我也不认为 window.createPopup 是 asp.net 中的方法。当我们网站的任何客户因为我无法控制他们的浏览器设置而去打印页面时,如何防止弹出窗口阻止程序阻止打印页面对话框?可以这样做吗?

<script type="text/javascript">
   function PrintGridData() {
       var prtGrid = document.getElementById('<%=panel22.ClientID %>');
       prtGrid.border = 0;
       var prtwin = window.open('', 'Printpanel22Data', 'left=100,top=100,width=1000,height=1000,tollbar=0,scrollbars=1, status=0,resizable=1');
       prtwin.document.write(prtGrid.outerHTML);
       prtwin.document.close();
       prtwin.focus();
       prtwin.print();
       prtwin.close();       
   }
    </script>

以及调用函数的代码

Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
    ClientScript.RegisterStartupScript(Me.[GetType](), "PrintOperation", "PrintGridData()", True)
End Sub

很久以前我不得不处理这样的事情。我最终放弃了弹出窗口 window 进行打印,只是在我的 CSS 文件中使用了打印样式。是的,这需要更多的工作,而且您将使用大量的纸张来测试它,但我不得不迎合那些讨厌弹出窗口的用户。

据我所知,弹出 window 的唯一其他方法是在锚标记中添加 target="_blank"...

您可以使用

function PrintDiv() {
            var contents = document.getElementById("dvContents").innerHTML;
            var frame1 = document.createElement('iframe');
            frame1.name = "frame1";
            frame1.style.position = "absolute";
            frame1.style.top = "-1000000px";
            document.body.appendChild(frame1);
            var frameDoc = frame1.contentWindow ? frame1.contentWindow : frame1.contentDocument.document ? frame1.contentDocument.document : frame1.contentDocument;
            frameDoc.document.open();
            frameDoc.document.write('<html><head><title>DIV Contents</title>');
            frameDoc.document.write('</head><body>');
            frameDoc.document.write(contents);
            frameDoc.document.write('</body></html>');
            frameDoc.document.close();
            setTimeout(function () {
                window.frames["frame1"].focus();
                window.frames["frame1"].print();
                document.body.removeChild(frame1);
            }, 500);
            return false;
        }