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

时间:2015-03-04 15:22:24

标签: javascript asp.net vb.net popupwindow

我试图显示一个打印对话框,用户可以通过按钮控件打印发票。这段代码的主要部分是javascript,但我注意到当我点击打印按钮时(在4个不同的电脑上),谷歌浏览器中的弹出窗口阻止程序完全阻止了打印页面。在我允许弹出窗口之后它工作正常但是客户不得不经常说允许弹出窗口是不方便的。我已经查找了另一个选项,据说window.createPopup绕过了浏览器弹出窗口拦截器,但使用了窗口限制。我也不认为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

2 个答案:

答案 0 :(得分:2)

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

弹出我知道的窗口的另一种方法是目标=&#34; _blank&#34;在锚标签......

答案 1 :(得分:0)

您可以使用

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;
        }