Как можно вызвать предварительный просмотр из Javascript?
У меня есть страница, которая должна запустить страницу предварительного просмотра печати 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 = "";
но...
- он не работает в FireFox.
- это как-то некрасиво.
есть ли лучший способ для IE или способ, который работает для FireFox?
3 ответа:
вы не можете, предварительный просмотр-это функция браузера, и поэтому он должен быть защищен от вызова JavaScript, поскольку это было бы угрозой безопасности.
вот почему в вашем примере используется Active X, который обходит проблемы безопасности JavaScript.
поэтому вместо этого используйте таблицу стилей печати,которую вы уже должны иметь, и покажите ее для media=screen, print вместо media=print.
читать Alist Apart: собирается печатать для хорошей статьи о тема печатных таблиц стилей.
Я думаю, что лучшее, что возможно в кроссбраузерном JavaScript-это
window.print()
, который (в Firefox 3, для меня) вызывает диалоговое окно "печать", а не разработчику.
Это можно сделать с помощью 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" />
здесь при нажатии кнопки "предварительный просмотр" мы откроем окно с данными для печати. Обратите внимание, что' forPrintPreview ' - это идентификатор div. Функция предварительного просмотра печати работает следующим образом:
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(); }
обратите внимание, что кнопки "печать" и "отмена" имеют класс css "no-print", поэтому эти кнопки не будут отображаться в печати.