Проблемы с переключателем печати таблиц стилей PHP? - PullRequest
0 голосов
/ 19 ноября 2009

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

Но знайте, что он будет отображать диалоговое окно только в FireFox, а не в любом другом браузере, и вообще не будет отображать таблицу стилей печати. Может ли кто-нибудь помочь мне решить эти проблемы, так как я давно играл с PHP.

Вот код PHP.

<!-- Print Script -->
<?php if (isset($_GET['css']) && $_GET['css'] == 'print') { ?>
<meta name="robots" content="noindex" />
<link rel="stylesheet" type="text/css" href="http://localhost/styles/print.css" media="print" />
<script type="text/javascript">
//<![CDATA[
onload = print;
//]]>
</script> 
<?php } else { ?>
<link rel="stylesheet" type="text/css" href="http://localhost/styles/style.css" media="screen" />
<?php } ?>
<!-- End Print Script -->

А вот ссылка, по которой вы нажимаете, чтобы изменить таблицу стилей.

<a href="<?php echo $_SERVER['PHP_SELF']; ?>?css=print" id="print-page" title="Print Link">Print This Page</a>

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

Если это не работает в IE, попробуйте это:

window.onload = function(){ window.setTimeout('print()',100) };

Это немного задержит вызов, чтобы дать IE время для обработки.

Однако ....

Я бы просто перечислял обе таблицы стилей. Поскольку для style.css установлено значение media="screen", print.css будет единственной таблицей стилей, используемой браузером для форматирования напечатанной страницы:

<link rel="stylesheet" type="text/css" href="http://localhost/styles/style.css" media="screen" />
<link rel="stylesheet" type="text/css" href="http://localhost/styles/print.css" media="print" />

И настройте ссылку для печати следующим образом:

<a href="#" id="print-page" title="Print Link" onclick="print(); return false">Print This Page</a>

Это сэкономит ненужный вызов на сервере ... и может полностью избежать вашей проблемы.

0 голосов
/ 19 ноября 2009

Изменить это:

onload = print;

К этому:

if(window.print())
  onload = window.print();
else
  onload = window.print;

Если бы вы хотели это в троичном стиле

onload = (window.print()) ? window.print() : window.print;

Это позволит браузеру проверить и посмотреть, «видит» ли он функцию window.print. Если это невозможно (как в случае с Opera), используйте другую версию.

Кроме того, будьте осторожны с очисткой значения $_SERVER["PHP_SELF"].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...