我试图弄清楚这一点,但没有太多信息。哪些浏览器支持 E4X,为什么它没有被更广泛地采用?
4 回答
哪些浏览器支持 E4X
Firefox 和其他基于 Mozilla 代码库的。
为什么它没有被更广泛地采用?
因为它提供了一些现有标准(如 DOM)尚未涵盖的实用功能。
好吧,它比 DOM 使用起来更简单,但代价是你无法访问 XML 的所有功能,而且完全愚蠢、不必要的 XML 文字/模板语法是一场安全灾难,因此它的作者甚至完全静态的受 htaccess 保护的文档必须担心解决该功能。
作为访问 XMLHttpRequest 结果的更简单方法,JSON 完全胜出。对于完整的 XML 处理,您仍然需要 DOM。为了更轻松地处理文档,有选择器、XPath 和 JS 库可以做到这一点,而无需引入奇怪的新语言语法。
这并没有为 E4X 留下太多的利基市场。TBH 我希望它会死。(ETA:它现在几乎已经这样做了。)
Firefox在版本 16 中放弃了 E4X 支持:
E4X 已弃用。Firefox 16 中的内容默认禁用,Firefox 17 中的 chrome 默认禁用,Firefox 18 中将其删除。请改用 DOMParser/DOMSerializer 或非本机 JXON 算法。
据w3schools称,“Firefox 是目前唯一对 E4X 支持相对较好的浏览器。”
您可以改用XPath。尽管 XPath 不是跨浏览器,但有几个 Javascript 解决方案,例如这个 jQuery 插件。
编辑
您实际上可以在没有插件的情况下使用 jQuery:
$('<xml><some><code>code</code><tag>text</tag></xml></xml>').find('some > code').text()
我开发了一个 babel 插件,通过 babel 编译为所有浏览器添加了 E4X 基本支持。
https://www.npmjs.com/package/babel-plugin-transform-simple-e4x
您还可以使用 npm simple4x 库将 xml 字符串解析为类似 XML 的对象。
https://www.npmjs.com/package/simple4x
该插件转译以下 E4X:
var fooId = 'foo-id';
var barText = 'bar text';
var xml =
<xml>
<foo id={fooId}>
{barText}
</foo>
</xml>;
到以下 JavaScript:
var XML = new require("simple4x");
var fooId = 'foo-id';
var barText = 'bar text';
var xml = new XML("<xml><foo id=\"" + fooId + "\">" + barText + "</foo></xml>");