Подтвердить что ты не робот

Как вызывать предварительный просмотр из Javascript?

У меня есть страница, которая должна запускать страницу предварительного просмотра печати. ​​

Я нашел это:

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?

4b9b3361

Ответ 1

Вы не можете, Предварительный просмотр печати является особенностью браузера и поэтому должен быть защищен от вызова JavaScript, поскольку это будет угрозой безопасности.

Вот почему ваш пример использует Active X, который обходит проблемы безопасности JavaScript.

Итак, вместо этого используйте таблицу стилей печати, которую вы уже должны иметь, и покажите ее для экрана media =, печать вместо media = print.

Прочитайте Alist Apart: переход на печать для хорошей статьи по теме стилей печати. ​​

Ответ 2

Я думаю, что лучшее, что возможно в кросс-браузерном JavaScript, window.print(), которое (в Firefox 3 для меня) вызывает диалог "печать", а не диалог предварительного просмотра.

Ответ 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();
}

Соблюдайте, что кнопки "print" и "cancel" имеют класс css "no-print", поэтому эти кнопки не будут отображаться в печати. ​​