2010-11-09 4 views
0

que je dois faire une fourchette (selon le javascript activé ou non):Est-ce que JavaScript est activé?

<?xml version="1.0" encoding="windows-1251"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" indent="no" encoding="windows-1251"/> 
<xsl:template match="someNode"> 
    <xsl:variable name="vNoscript"> 
     <noscript>true</noscript> 
    </xsl:variable> 

    <xsl:choose> 
     <!-- javascript disabled --> 
     <xsl:when test="$vNoscript = 'true'"> 
      code branch 1 
     </xsl:when> 
     <!-- javascript enabled --> 
     <xsl:otherwise> 
      code branch 2   
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:template> 
</xsl:stylesheet> 

Ce code ne fonctionne pas correctement - la variable dans tous les cas « vNoscript » contient la valeur « true ».

Quels sont les moyens de résoudre le problème?

Peut-être nécessaire de faire de tels tests très différemment?

Mise à jour 1: Je cours ce code sur le serveur.

Mise à jour 2: J'ai besoin de charger dynamiquement les images sur la page (en utilisant javascript). Pour ceux qui ont désactivé JavaScript dans le navigateur, j'ai besoin de télécharger des photos "de la manière habituelle".

+1

Où exécuter ce XSLT vous? Dans le navigateur? Sur le serveur? Qu'est-ce que vous voulez réellement accomplir? –

Répondre

1

Étant donné que vous exécutez ce code sur le serveur, vous ne pouvez pas savoir si le client a JavaScript activé ou non.

Une façon de contourner ce problème est à l'aide d'un paramètre de requête HTTP vous indiquant si pour générer une version compatible avec JavaScript de votre page ou non et que le client décide quelle version d'appeler:

<script type="text/javascript"> 
document.write("<a href='http://www.example.com/somepage.php?js=true'>Link</a>") 
</script> 
<noscript> 
    <a href='http://www.example.com/somepage.php?js=false'>Link</a> 
</noscript>  

Ensuite, vous soit appelez des transformations XSL séparées, soit vous pouvez utiliser un seul XLST paramétré.

Mise à jour (après votre édition):

créer simplement noscript contenu dans votre XSLT comme vous le feriez en HTML statique:

<?xml version="1.0" encoding="windows-1251"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="html" indent="no" encoding="windows-1251"/> 
<xsl:template match="someNode"> 
    <!-- javascript enabled --> 
    HTML/JavaScript to dynamically load images 

    <noscript>fallback content</noscript> 
</xsl:template> 
</xsl:stylesheet> 
+0

Je ne peux pas faire un tel "bouton" sur une vue. – Kalinin

+0

est-il possible de faire "choisir" la construction? Je pense que c'est une solution plus élégante. – Kalinin

+0

@Kalinin: les paramètres Javascript ne font pas partie des informations de contexte XSLT (en fait, XSLT fonctionne avec javascript désactivé!). Vous devez transmettre cette information en tant que paramètre à la feuille de style. Ou, comme l'a écrit @ 0xA3, utilisez le vocabulaire (X) HTML pour le repli. –

Questions connexes