mentre chiedevo informazioni altrove, perdendo tempo a scrivere nel mio blog, mi è venuta in mente una soluzione al problema, tanto semplice quanto "macchinosa".
Ovviamente è necessario avere un linguaggio server-side, in questo caso PHP per mostrare un esempio.
Il tag head non accetta il noscript ma accetta JavaScript.
Questo significa che basta semplicemente includere una risorsa esterna che punta non ad un vero file JavaScript ma ad una pagina server:
codice:
<head>
<script type="text/javascript" src="cssFilter.php"></script>
<link rel="stylesheet" media="all" href="myPage.php" />
</head>
L'ordine è fondamentale per la riuscita della mia soluzione poichè se non è stata verificata la possibilità del browser di interpretare codice JavaScript non può funzionare alcunchè.
cssFilter.php
codice:
<?php
session_start();
$_SESSION['JavaScript'] = true;
header('Content-Type: text/javascript');
exit('this;');
?>
a questo punto l'utente avrà un cookie o un SID (Session ID) automaticamente appeso ad ogni richiesta, non resta che sfruttare questa informazione nell'altro elemento, il link dello stile
myPage.php
codice:
<?php
session_start();
$output = file_get_contents(
isset($_SESSION['JavaScript']) && $_SESSION['JavaScript'] === true ?
'scriptEnabled.css':
'scriptDisabled.css'
);
header('Content-Type: text/css');
header('Content-Length: '.strlen($output));
$_SESSION['JavaScript'] = false;
exit($output);
?>
Per concludere, sfruttando un ob_handler è possibile diminuire le dimensioni del download sfruttando, se possibile, la compressione gz, inserendo solo questo prima dell'avvio di sessione:
codice:
ob_start('ob_gzhandler');
Come vi sembra come soluzione? Non riesco a trovare lati negativi, se non l'utilizzo obbligato di una sessione a prescindere dal tipo di sito.
P.S. chiedo scusa ai mod se sono andato fuori tema, la soluzione è PHP ma potrebbe tornare utile, come concetti, per qualunque altro linguaggio server. Se lo ritenete necessario spostate pure il tutto dove lo ritenete più utile, grazie
[edit]
demo page: http://www.3site.eu/examples/css4js/