我有一个链接,当我点击它时会调用带有字符串参数的javascript函数。该字符串实际上是一个a-tag + script-tag,如:
<a>..</a><script>...</scipt>
显示视频文件。
所以无论如何,javascript函数应该创建该代码,并使视频显示在页面上,但是当我按下链接时出现的是一串代码,因此它显示为文本(但是它是一个超链接)而不是执行成为视频。
任何人都知道为什么?
很奇怪,因为如果我复制代码(显示为文本),并将其粘贴到编辑器中,就像正常一样,那么视频会显示......
<a title="Click to Show Video" href='javascript:void(0);' onclick="switchFunc('{$thisNode/@*[name()=current()/@Name]}');">
<div dir="{@Direction}" class="ms-rtestate-field">
<xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping="yes"/>
</div>
</a>
<script type="text/javascript">
function switchFunc(source) {
document.getElementById('videoContainer').innerHTML = source;
}
</script>
<div id="videoContainer"> </div>
答案 0 :(得分:1)
正如我在评论中所说,我怀疑您的属性正在编码,因此您可以尝试以下操作:
<a title="Click to Show Video" href='javascript:void(0);' >
<xsl:attribute name="onclick">switchFunc('<xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping="yes"/>');</xsl:attribute>
<div dir="{@Direction}" class="ms-rtestate-field">
<xsl:value-of select="$thisNode/@*[name()=current()/@Name]" disable-output-escaping="yes"/>
</div>
</a>
答案 1 :(得分:0)
为什么不用你想要的标签更新innerHtml,并通过eval运行javascript?
我不完全确定它的xslt部分,但想法是分解你的两个部分(你曾说过这真的是<a>Anchor</a>
和<script>Javascript</script>
)
HTML
<a title="Click to Show Video"
href='javascript:void(0);'
onclick="switchFunc('<a>Anchor</a>','Javascript');">
JS
<script type="text/javascript">
function switchFunc(htmlValue, javascriptMethodCall) {
document.getElementById('videoContainer').innerHTML = htmlValue;
eval(javascriptMethodCall);
}
</script>
答案 2 :(得分:0)
无论输出转义设置如何,属性值总是被转义,因为内容可能会破坏XML文件的良好状态。
无论如何,核心架构在多种方面存在问题。首先,它将一些简单的客户端功能移动到服务器。另外,通过这种方式,您可以将页面的主要内容(视频网址)封装到脚本代码中,从而将其隐藏在索引器之外。
我是XSLT的一大乐趣,但代码的怪异外观和易读性告诉我某些事情不行。
一种可能的解决方案是注释方法:渲染列表,其中包含存储作为数据属性的关键信息的项目,并让javascript代码(您自己的或客户端模板引擎)构建输出。