2012-03-23 179 views
0

我有一个链接,当我点击它时调用一个带有字符串参数的javascript函数。该字符串实际上是一个a-tag +脚本标记,如:如何正确使用innerHTML

<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

这是什么语法? – 2012-03-23 18:27:41

+0

它有一些来自微软SharePoint的xls,它就像一个表示字符串的变量。 – sneaky 2012-03-23 18:29:21

+0

你可以在控制台检查字符串是如何格式化的吗?我认为这是xsl的一个问题,你也应该看看onclick字符串。 – NicoSantangelo 2012-03-23 18:30:23

回答

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

刚试过这个,它仍然显示为文本。 – sneaky 2012-03-23 18:40:34

+0

这很奇怪,你能在这里粘贴属性值吗? – NicoSantangelo 2012-03-23 19:14:02

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

我不明白你的意思,你能在这里输入代码吗? – sneaky 2012-03-23 18:30:25

+0

更新了我的意思 – 2012-03-23 18:33:09

+0

我将如何改变一个标签,现在叫switchFunc? – sneaky 2012-03-23 18:37:24

0

无论输出转义设置如何,属性值总是会被​​转义,因为内容可能会破坏XML文件的格式。

无论如何,核心架构在多方面存在问题。首先它将一些简单的客户端功能移动到服务器。加上这种方式,您可以将页面的主要内容(视频网址)封装到脚本代码中,从而将其隐藏在索引器中。

我是XSLT的一大乐趣,但怪异的外观和代码的硬可读性表明某些东西不行。

一个可能的解决方案是注解方法:渲染控股形式存储在他们数据 - 属性关键信息项列表,让JavaScript代码(自己的或客户端模板引擎)构建输出。