Coldfusion(cdata):什么可以替代CDATA与firefox一起使用?

时间:2013-09-03 22:08:49

标签: xml firefox browser coldfusion

我有一张动态创建的数据和链接表。该网站是用coldfusion构建的,我不太了解。 将数据填充到页面的代码行如下(至少我确定这一点):

<cfoutput>
       <td>
     <![CDATA[
    <a href="##" onclick="javascript:viewRecord('#priKeyId#');setTimeout('gridMenu.cancelmenu();',50);" title="View"> #rowdat#
        </a>
           ]]>
      </td>
   </cfoutput>

这个技巧似乎在CDATA标签中,因为如果我不使用它并将代码切换回xmlformat(#rowdat#)而不是; firefox喜欢它,它显示我表中的所有数据/链接没有问题!但是,问题转移到其他浏览器! (chrome,IE,safari他们都喜欢cdata!) 任何帮助如何让firefox正确显示表数据?

由于

Update1:​​这是一张link,其图片可能比我更能解释这个问题!

Update2:问题似乎是从href =“##”生成的链接。所以我试着在代码和HTMLEditFormat()之前设置实际的链接,如下所示:

 <cfset mylink ="https://my.site.com/index.cfm?event=public.my.site.view&site_id=" & priKeyId 
 <cfset mylink = HTMLEditFormat(mylink)>
 <cfif colName eq link>

 <cfoutput>
  <td id="cdata">
  <a onclick="viewRecord('#priKeyId#');setTimeout('gridMenu.cancelmenu();', 50);return false;" href="#mylink#"  title="View">#rowdat#</a>
  </td>
   </cfoutput>

然而,这也不起作用。

3 个答案:

答案 0 :(得分:2)

请允许我指向this answer,而不是关闭它,这表明Firefox不支持“禁用 - 输出 - 转义”。

如果您使用的是ColdFusion 10,

<a href="##" onclick="javascript:viewRecord('#priKeyId#');setTimeout('gridMenu.cancelmenu();',50);" title="View">#encodeForHTML(rowdat)#</a>

否则,xmlFormat()没问题。

答案 1 :(得分:1)

试试这个:

删除CDATA,不要使用它,而是使用它:

<cfoutput>
    <td>     
        <a href="##" onclick="javascript:viewRecord('#priKeyId#');setTimeout('gridMenu.cancelmenu();',50);" title="View">#HTMLEditFormat(rowdat)#</a>           
    </td>
</cfoutput>

我在Firefox,IE,Chrome和Opera中尝试过,因为HTMLEditFormat()应该可行。如果它适用于您,请告诉我。

答案 2 :(得分:1)

首先,感谢您@iKnowKungFu和@ TechMark2K的投入,帮助我发现/消除了解决我问题的方案。

其次,了解FF如何处理CDATA部分对于了解如何解决它至关重要。我发现FF从CDATA的开头一直注释到下一个HTML标签的结尾并停在那里!此外,它按字面解释任何非Javascript动态生成的代码(例如,从href =“##”生成的链接)。

知道了,我通过5个步骤解决了我的问题:

1-使用CDATA部分,因为它解决了除firefox以外的所有浏览器中的问题并单独处理Firefox的问题。
2-使Firefox正确显示CDATA部分的内容:

 a- Comment out (not removing) only the closing of CDATA tag: `<!-- ]]> -->` (FF kept showing it at the end of my text). Other browsers' behavior towards cdata didn't change with this modification.
 b- Ditch the href="## as FF doesn't interpret it well inside CDATA. So I generated it outside CDATA and used a variable instead: href=#myLink# .  

3-使用CF函数#toScript(#linksArray#,“links”)#将链接(或链接数组)发送到javascript变量中。如果您使用数组,请务必发送带有链接的区别ID(我个人不需要执行此步骤因为插件功能,所以即使在处理之后我也跳过它!)
4-给目标文本一个id =“myText”(不是包含它们的整个标记,使用<span id ="myText"&gt;)

5- if (you skipped step 3, for any reason, like me) {  
      style "myText" id to look/behave like a link!(and don't tell others about it)  
        } else { 
            or better, using JavaScript or jQuery, surround "myText" id text contents with an anchor tag of the matching link from the javascript variable(or array): "links" .
}   

直到FF开发社区醒来并在FireFox中修复此错误(幸运的是不是粉丝)我希望这可以帮助那些偶然发现CDATA-Firefox相关问题的人。