加载了AJAX的XSLT,只包含在Firefox中触发的<script>

时间:2015-04-25 18:54:07

标签: javascript ajax xslt xhtml

我编写了一个应用程序,其中AJAX加载了一个XSLT,里面有&lt; script&gt;

&#xA;&#xA;

奇怪的是脚本运行在没有 eval()的Firefox中。脚本不是在Opera或Chrome中运行的。&#xA;因此,我简化了代码并将其发布在此处。

&#xA;&#xA;

这是Firefox的错误吗?

&#xA;&#xA;

是否有跨浏览器的解决方法? (在firefox上不运行 eval()的解决方法,仅针对来自xslt的脚本,但是在Chrome上运行 eval(),对于每个加载了AJAX的脚本都运行Opera - 两者都是在XSLT或XHTML中。

&#xA;&#xA;

index.xhtml

&#xA;&#xA;
  &lt;?xml version =“1.0”encoding =“UTF-8”?&gt;&#xA;&lt;!DOCTYPE html&gt;&#xA;&lt; html xmlns =“http://www.w3.org/1999 / xhtml“&gt;&#xA;&lt; head&gt;&lt; script src =”app.js“/&gt;&lt; / head&gt;&#xA;&lt; body onload =”locationHashChanged();“ />
</html>

app.js

& #xA;&#xA;
  function get(file){&#xA; var request = new XMLHttpRequest();&#xA; request.open(“GET”,file,false);&#xA; request.send();&#XA; return request.responseXML;&#xA;}&#xA;&#xA; function insert(where,root){&#xA; // var scripts = root.getElementsByTagName('script');&#xA; where.parentNode.replaceChild(root,where);&#xA; // for(var z = 0; z!= scripts.length; z ++)eval(scripts [z]);&#xA;}&#xA;&#xA; function locationHashChanged(){&#xA; var xml = get('apps.xml');&#xA; var xslt = get('xslt.xsl');&#xA; var xsltProcessor = new XSLTProcessor();&#xA; xsltProcessor.importStylesheet(XSLT);&#XA; insert(document.body,xsltProcessor.transformToFragment(xml,document).firstChild);&#xA;};&#xA;  
&#xA;&#xA;

xslt.xsl

&#xA;&#xA;
 &lt;?xml version =“1.0”?&gt;&#xA;&lt; xsl:stylesheet version =“1.0 “xmlns:xsl =”http://www.w3.org/1999/XSL/Transform“&gt;&#xA;&#xA;&lt; xsl:strip-space elements =”*“/&gt; &#xA;&#xA;&lt; xsl:template match =“// * [@ path ='']”&gt;&#xA;&lt; body xmlns =“http://www.w3.org/1999 / xhtml“&gt;&#xA;&lt; script&gt; alert('仅限Firefox');&lt; / script&gt;&#xA;&lt; / body&gt;&#xA;&lt; / xsl:template&gt;&#xA ;&#XA;&LT; / XSL:样式表&GT;&#XA;  
&#XA;&#XA;

apps.xml

& #xA;&#xA;
 &lt;?xml version =“1.0”encoding =“UTF-8”?&gt;&#xA;&lt; menu name =“”path =“”/&gt; &#XA;  
&#XA;

1 个答案:

答案 0 :(得分:0)

将警报放入CDATA标签会有帮助吗?所以

<script type="text/javascript">
  <![CDATA[alert('Only in Firefox');]]>
</script>

我已经开始为xslt模板中包含的所有javascript执行此操作