2009-11-19 4 views
0

J'ai ce commutateur de feuilles de style d'impression que j'ai créé il y a longtemps et je sais qu'il ne fonctionnera pas pour une raison quelconque, c'est supposé passer à une feuille de style d'impression lorsque le lien est cliqué et afficher la boîte de dialogue d'impression. Mais sachez qu'il affiche uniquement la boîte de dialogue dans FireFox et pas dans les autres navigateurs et n'affiche pas la feuille de style d'impression. Quelqu'un peut-il m'aider à résoudre ces problèmes car cela fait un moment que j'ai joué avec PHP.Problèmes de sélecteur d'impression de feuilles de style PHP?

Voici le code 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 --> 

Et voici le lien sur lequel vous cliquez pour changer la feuille de style.

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

La boîte de dialogue d'impression apparaît dans Opera et Chrome. – random

+0

Il n'apparaîtra pas dans Internet Explorer. Cela peut-il être réparé? – jab

+0

Pourquoi ne voyez-vous pas l'impression CSS? Il n'apparaîtra que si vous imprimez, sur papier ou au format PDF. Ne s'affichera pas à l'écran. – random

Répondre

0

Modifier ceci:

onload = print; 

à ceci:

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

Si vous vouliez dans un style ternaire

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

Cela permettra au navigateur de vérifier et voir s'il "voit" le window.print fonction. Si cela ne peut pas (comme dans le cas d'Opera), alors utilisez l'autre version.

Faites également attention à la valeur cleaning the $_SERVER["PHP_SELF"].

+0

maintenant il ne fonctionnera pas dans l'opéra. et la feuille de style n'affiche pas – jab

+0

Avoir édité pour le cas de Opera et d'autres navigateurs qui appellent différemment la fonction 'print'. – random

1

Si son travail pas dans IE, essayez ceci:

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

Cela retardera l'appel un peu pour donner le temps IE à traiter.

Cependant ....

Je voudrais juste la liste toujours les deux feuilles de style. Depuis style.css est réglé sur media="screen", print.css sera la seule feuille de style utilise le navigateur pour formater la page imprimée:

<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" /> 

Et mis en place le lien d'impression comme ceci:

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

Il économiserait appel inutile au serveur ... et pourrait éviter votre problème tout à fait.

Questions connexes