如何从Javascript调用打印预览?

如何从Javascript调用打印预览?,javascript,printing,Javascript,Printing,我有一个页面,应该启动打印预览页面onload 我发现: var OLECMDID = 7; /* OLECMDID values: * 6 - print * 7 - print preview * 1 - open window * 4 - Save As */ var PROMPT = 1; // 2 DONTPROMPTUSER var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:88

我有一个页面,应该启动打印预览页面onload

我发现:

var OLECMDID = 7;
/* OLECMDID values:
* 6 - print
* 7 - print preview
* 1 - open window
* 4 - Save As
*/
var PROMPT = 1; // 2 DONTPROMPTUSER
var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>';
document.body.insertAdjacentHTML('beforeEnd', WebBrowser);
WebBrowser1.ExecWB(OLECMDID, PROMPT);
WebBrowser1.outerHTML = "";
var-olcemdid=7;
/*MDID值:
*6-打印
*7-打印预览
*1-打开窗口
*4-另存为
*/
var PROMPT=1;//2 DontComputer
var WebBrowser='';
document.body.insertAdjacentHTML('beforeEnd',WebBrowser);
WebBrowser1.ExecWB(OLECMDID,提示符);
WebBrowser1.outerHTML=“”;
但是

  • 它在FireFox中不起作用
  • 有点难看

  • IE有更好的方式吗?FireFox有更好的方式吗?

    你不能,打印预览是浏览器的一项功能,因此应该避免被JavaScript调用,因为这会带来安全风险

    这就是为什么您的示例使用activex,它绕过了JavaScript安全问题

    因此,请使用您已经拥有的打印样式表,并将其显示为media=screen,print而不是media=print


    阅读一篇关于打印样式表主题的好文章。

    我认为跨浏览器JavaScript最好的方法是
    window.print()
    ,它(在Firefox3中,对我来说)会打开“打印”对话框,而不是打印预览对话框


    仅供参考,“打印”对话框是您计算机的打印弹出窗口,当您按Ctrl-p键时,将显示该对话框。打印预览是Firefox自己的预览窗口,它有更多的选项。这是您通过Firefox菜单>打印获得的功能…

    可以使用javascript完成。 假设您的html/aspx代码是这样的:

    <span>Main heading</span>
    <asp:Label ID="lbl1" runat="server" Text="Contents"></asp:Label>
    <asp:Label Text="Contractor Name" ID="lblCont" runat="server"></asp:Label>
    <div id="forPrintPreview">
      <asp:Label Text="Company Name" runat="server"></asp:Label>
      <asp:GridView runat="server">
    
          //GridView Content goes here
    
      </asp:GridView
    </div>
    
    <input type="button" onclick="PrintPreview();" value="Print Preview" />
    
    function PrintPreview() {
     var Contractor= $('span[id*="lblCont"]').html();
     printWindow = window.open("", "", "location=1,status=1,scrollbars=1,width=650,height=600");
     printWindow.document.write('<html><head>');
     printWindow.document.write('<style type="text/css">@media print{.no-print, .no-print *{display: none !important;}</style>');
     printWindow.document.write('</head><body>');
     printWindow.document.write('<div style="width:100%;text-align:right">');
    
      //Print and cancel button
     printWindow.document.write('<input type="button" id="btnPrint" value="Print" class="no-print" style="width:100px" onclick="window.print()" />');
     printWindow.document.write('<input type="button" id="btnCancel" value="Cancel" class="no-print"  style="width:100px" onclick="window.close()" />');
    
     printWindow.document.write('</div>');
    
     //You can include any data this way.
     printWindow.document.write('<table><tr><td>Contractor name:'+ Contractor +'</td></tr>you can include any info here</table');
    
     printWindow.document.write(document.getElementById('forPrintPreview').innerHTML);
     //here 'forPrintPreview' is the id of the 'div' in current page(aspx).
     printWindow.document.write('</body></html>');
     printWindow.document.close();
     printWindow.focus();
    }
    
    主标题
    //GridView内容在这里
    
    虽然这是一篇好文章,但它没有解决他的问题。我们有一个客户端,它不想教用户按Ctrl+P或File->Print,因此他们希望屏幕上有一个打印按钮。如果您有一个Firefox扩展或插件,可以访问浏览器组件,并且您需要启动打印预览,您可以使用:
    PrintUtils.printPreview(PrintPreviewListener)
    出于好奇,您能解释一下为什么打印预览会带来安全风险,而打印不会带来安全风险吗?在我看来,现有的浏览器特定javascript有很多例子。特定浏览器添加window.printPreview()会有什么安全风险?或者,从2014年起,“打印预览”是Chrome中的打印对话框。我相信Firefox也会效仿。好吧,现在到2018年,是的,你可以!使用
    window.print()它适合我。在IE中,这个打开打印对话框,而不是打印预览,它也会打开打印对话框而不是预览。