2009-11-19 73 views
0

好的,我有這個樣式表切換器,只有當我從樣式錶鏈接中除去media =「print」時纔會起作用。PHP樣式表打印切換器問題重訪?

我想知道如何解決這個問題,而不會遺漏media =「print」屬性。

這裏是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[ 
if(window.print()) 
    onload = window.print(); 
else 
    onload = window.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 htmlentities($_SERVER['PHP_SELF']); ?>?css=print" id="print-page" title="Print">Print This Page</a> 
+0

「如果(window.print())」 ......這看起來是錯誤的。我認爲它應該是「if(typeof window.print =='function')」 – 2009-11-19 07:14:57

回答

2

您不需要PHP代碼來確定是否輸出用於打印的CSS文件。默認情況下,瀏覽器不會呈現「打印」樣式表,並且應該在打印時忽略「屏幕」樣式表。

可能存在一些呈現問題:瀏覽器可能沒有足夠的時間來呈現頁面並將其正確地提供給打印機。

一種簡化的解決方案是:

<head> 
<link rel="stylesheet" type="text/css" href="http://localhost/styles/print.css" media="print" /> 
<link rel="stylesheet" type="text/css" href="http://localhost/styles/style.css" media="screen" /> 
<script type="text/javascript"> 
function print_it() { 
if(window.print()) 
    onload = window.print(); 
else 
    onload = window.print; 
} 
</script> 
</head> 

<body> 
<a href="javascript:print_it();" id="print-page" title="Print">Print This Page</a> 
</body> 
+0

我希望用戶看到首先顯示的打印頁面然後打印對話框。 – jab 2009-11-19 07:12:20

+0

在這種情況下,在頁面的適合打印機的版本中,「print.css」的媒體應該是「打印,屏幕」。瀏覽器將使用相同的樣式表顯示並打印 – 2009-11-19 07:20:36

+0

另請參閱我對「if(window.print())」語句所做的評論 – 2009-11-19 07:22:29