2010-11-09 42 views
0

我需要做一个叉(取决于启动Javascript与否):是否启用JavaScript?

<?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> 

此代码不能正常工作 - 在任何情况下,变量“vNoscript”包含值“真”。

有什么方法可以解决这个问题?

可能需要做非常不同的测试吗?

更新1:我在服务器上运行此代码。

更新2:我需要动态加载页面上的图片(使用javascript)。对于那些在浏览器中禁用Javascript的人,我需要以“常用方式”上传图片。

+1

你在哪里运行这个XSLT?在浏览器中?在服务器上?你究竟想实现什么? – 2010-11-09 11:46:42

回答

1

由于您在服务器上运行此代码,您无法知道客户端是否启用了JavaScript。为了解决这个问题

一种方式是通过使用HTTP请求参数告诉您是否生成您的网页或不支持JavaScript的版本和客户决定哪个版本调用:

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

然后你可以调用单独的XSL转换,也可以使用单个参数化的XLST。

更新(在您编辑后):

只需在您的XSLT,你会在静态的HTML确实创造noscript内容:

<?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

我不能在视线上做出这样的“按钮”。 – Kalinin 2010-11-09 11:59:48

+0

是否可以做“选择”建设?我认为这是更优雅的解决方案。 – Kalinin 2010-11-09 12:05:19

+0

@Kalinin:Javascript设置不是XSLT上下文信息的一部分(事实上,XSLT可以在关闭javascript的情况下工作)。您需要将此信息作为参数传递给样式表。或者@ 0xA3写道,使用(X)HTML词汇表来回退。 – 2010-11-09 12:44:49

相关问题