我编写了一个应用程序,其中AJAX加载了一个XSLT,里面有< script>
。
奇怪的是脚本运行在没有 eval()
的Firefox中。脚本不是在Opera或Chrome中运行的。
因此,我简化了代码并将其发布在此处。
这是Firefox的错误吗?


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


 <?xml version =“1.0”encoding =“UTF-8”?>
<!DOCTYPE html>
< html xmlns =“http://www.w3.org/1999 / xhtml“>
< head>< script src =”app.js“/>< / head>
< 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;
答案 0 :(得分:0)
将警报放入CDATA标签会有帮助吗?所以
<script type="text/javascript">
<![CDATA[alert('Only in Firefox');]]>
</script>
我已经开始为xslt模板中包含的所有javascript执行此操作