是否可以从加载到浏览器的XML文档执行javascript ?



我想知道是否有一些XML处理指令甚至一个元素(如HTML<script>元素),这将吸引Chrome(和克隆像Safari和Edge), Firefox和Opera加载和执行javascript形式的任何XML文档,即使它不是HTML。

例子
<?xml version="1.0" encoding="UTF-8"?>
<?script type="text/javascript" href="xslt.js"?> 
<root>
<foo>
<bar/>
</foo>
</root>

这将以XML格式加载文档并加载javascript,然后javascript可以引导渲染的其余部分。javascript可以从窗口访问XML DOM。文档变量,并做任何它想做的事情,最终用浏览器可以呈现的HTML节点替换根节点。

一个问题,非常集中。


因为答案可能是"不",如果你问"为什么你想这样做?"这就是为什么需要这样的东西。不,这不是额外的问题,而是一个理由,为什么我的要求是必要的,并思考可能的解决办法。

我知道浏览器中的XSLT是为加载任何XML文档而开发的,通过XML -stylesheet处理指令,您可以告诉浏览器使用其内置XSLT引擎呈现它。不幸的是,浏览器开发人员都不了解XML、XSLT和XPath的强大功能,而痴迷于JSON这种废话。因此,XSLTProcessor特性很老了,在XSLT的石器时代版本(1.0)上,甚至充满了错误,而且完全没有维护。更糟糕的是,它还用"安全"之类的借口搞砸了。并且计划将其从浏览器代码中完全移除。

这意味着我们需要找到自己的方法来做到这一点。这意味着,我们需要某种方式在XML文档中包含javascript引导代码,类似于xsl-stylesheet处理指令,这样我们就可以使用基于javascript的XSLT引擎(如Saxon-JS)开始我们自己的处理。

当他们最终从他们的代码中删除这个糟糕的XSLT v1.0处理器时,那么问题将是,如果将XML文档(不是HTML)加载到浏览器中会发生什么?浏览器会怎么处理它呢?当前的呈现是使用某种默认样式表完成的,因为这个打印得很漂亮的XML。那么问题就变成了如何以某种方式将其他默认样式表挂钩到浏览器配置中?

一种可能的方法是创建一个浏览器扩展,该扩展在加载XML文档时实际解释这些处理指令。这可以执行脚本处理指令,但也许更好的是,以自己的方式处理处理指令。

XHTMLscript元素可能工作:<root><script src="foo.js" xmlns="http://www.w3.org/1999/xhtml"/>..</root>: https://martin-honnen.github.io/xslt/2022/example1.xml做例如<root><script src="example1.js" xmlns="http://www.w3.org/1999/xhtml"/><foo><bar>baz</bar></foo></root>,其中example1.js输出XML DOM文档到控制台的事件监听器附加到DOMContentLoaded事件。这只是一个示例,脚本文件被加载和执行,并且可以访问XML DOM文档。

引导Saxon-JS 2运行XSLT 3的示例位于https://martin-honnen.github.io/xslt/2022/example2.xml,它只使用两个XHTML脚本元素,一个加载Saxon-JS库,另一个然后设置事件侦听器以应用示例转换并将其结果插入文档中,替换默认文档内容。