0

我有一个动态创建的数据和链接表。该网站是用我不太了解的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:​​这是一个链接,其中有一张图片可能比我能更好地解释这个问题!

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>

然而,这也没有奏效。

4

3 回答 3

2

与其关闭它,不如让我指出这个答案,它指出 Firefox 不支持“禁用输出转义”。

如果您使用的是 ColdFusion 10,

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

否则, xmlFormat() 很好。

于 2013-09-03T22:33:19.893 回答
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() 应该可以工作。让我知道它是否适用于你的。

于 2013-09-06T03:34:33.443 回答
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"> )

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 相关问题的人。

于 2013-09-07T23:38:58.863 回答