这个任务似乎很简单:如何在xml文档中包含一个Javascript文件,以便至少Opera和Firefox可以实际解析它并执行代码?
答案 0 :(得分:21)
添加一个说明XHTML命名空间的脚本,它运行得很好。
<xhtml:script xmlns:xhtml="http://www.w3.org/1999/xhtml"
src="file.js"
type="application/javascript"/>
答案 1 :(得分:10)
如果我找到你,你想要一个XML文档在浏览器中查看时运行javascript吗?
这不是XML标准的一部分,因此在它出现之前不会被支持(我认为这将永远不会被支持,因为XML不是用于显示,而是数据)。如果你在谈论XHTML,那么这是另一回事。
-
编辑:只是为了澄清我的答案。
XML从未打算成为像HTML这样的显示标记,这就是开发XHTML的原因(符合XML标准的HTML)。浏览器已经以某种方式解释XHTML,但XML只是原始数据。
如果您希望XML运行诸如JavaScript之类的附加内容,您将需要考虑使用XSLT将XML转换为XHTML,从而利用浏览器功能。
答案 2 :(得分:7)
<script xmlns="http://www.w3.org/1999/xhtml"><![CDATA[
alert('Hello');
]]></script>
或外部javascript:
<script xmlns="http://www.w3.org/1999/xhtml" src="external.js"></script>
适用于Firefox和Opera。
答案 3 :(得分:2)
我这样做了:
XSLT:
<xsl:value-of select="/label[@id='MyScript']/text()" disable-output-escaping="yes"/>
<强> XML:强>
<label id="MyScript"><![CDATA[
<script type="text/javascript">
alert("Hello world");
</script>
]]></label>
答案 4 :(得分:0)
将XML和Javascript嵌入到XHTML文档中,然后使用动态HTML的大量且记录良好的功能。
通过推理,因为某些浏览器实现了XML文档的CSS样式,并且它们必须支持XML中嵌入的Javascript的执行,所以它们会比你更快地运行起来并运行得更快,就好像它有这两种想法之间的任何联系。
答案 5 :(得分:0)
与上述类似,但可能会出错,因为<![CDATA[
和]]>
部分不是有效代码。如果您将它放入XSL脚本中,您也可以在这些开始和结束元素之前添加JS注释标记。
我也使用xsl:text
元素输出<![CDATA[
部分。这部分可能有点作弊,但结果在格式良好的XML中。 xsl:choose
块中的示例可能是......
...
<xsl:when test='name()="script"'>
<script>
<xsl:for-each select='@*'><xsl:copy-of select='.' /></xsl:for-each>
<xsl:text disable-output-escaping='yes'>
// <![CDATA[
</xsl:text>
<xsl:copy-of select='./text()' />
<xsl:text disable-output-escaping='yes'>
//]]>
</xsl:text>
</script>
</xsl:when>
...
穿过碎片......
<script>
元素。<script>
标记。xsl:for-each
行保留输出中的代码属性。// <![CDATA[
。 //
将该行的其余部分呈现为注释,从而防止出现JS错误。<script>
标记的文本内容。注意:您必须预先设置换行符(如上所述或其他方式),以便在它之前的注释掉的行不会与此行相同。显然,如果确实如此,它也会注释掉这一行。保留后面的并不是必需的,但保持两个匹配的CDATA标签的美学。// ]]>
。这结束了CDATA块,再次,浏览器在读取JS时忽略了CDATA标记。</ li>
</script>
标记关闭该块。xsl:choose
块中使用它,请关闭xsl:when
。仅有步骤2,3,5和&amp; 7实际上复制脚本块。剩下的就是忙着工作。
转换像......这样的块
...
<script type='javascript'>alert('Hello World!');</script>
...
然后变成,
...
<script type='javascript'>
// <![CDATA[
alert('Hello World!');
// ]]>
</script>
通过XML和浏览器有效保存和读取。
答案 6 :(得分:-2)
应该帮助你的函数是eval()函数。此函数将评估您作为Javascript传递给它的任何字符串。
此外,可以在Javascript中解析XML。只需谷歌“javascript xml解析器”。
结合这两个想法,你就可以了。
如果您只是想将javascript放在XML文件中:
&LT; XML&GT; &lt; js script =“1”&gt; 这里有一些javascript; 这里有更多的javascript; &LT; / JS&GT; &lt; js script =“2”&gt; 这里有更多的javascript; jere甚至更多javascript; &LT; / JS&GT; &LT; / XML&GT;