`
hax
  • 浏览: 965095 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

鸡肋的E4X

    博客分类:
  • JS
阅读更多
前两天,Aimingoo问我如何能捕获E4X对象的事件(如修改了一个属性),我这两天稍做了研究,发现:

还真没办法!

问题在于E4X的模型,与现有JavaScript和DOM模型根本是不同的!

所以E4X的xml对象上,根本没有addEventListener之类的方法。而E4X的操作也不是基于对象上的方法的,有直接的运算符(例如+=可以用来追加元素),所以甚至也不可能使用暴力AOP(例如改写Element.setAttribute方法)。

理论上说,貌似E4X的xml对象有domNode()方法(我没有核对过规范ECMA357——连不上,难道ecma网站被功夫王河蟹了?),可以获得对应的DOM节点,然后应该可以addEventListener,但是实际上目前无论rhino和spidermonkey都不支持该方法(谁给测一下AS3?)。而且反过来,要对DOM对象包装得到E4X的xml对象(例如new XML(document)),也没有得到支持(再次,谁给测一下AS3)。也就是说,目前为之,E4X的xml对象,虽然是native了,但是和DOM却是完全割裂的。

这种割裂不仅是当前的implementation的问题,而是存在一些深层次的矛盾。

BE同志说:“I have a jaundiced view of E4X”,并指出了一些重要的兼容性问题。

而Rhino的David Caldwell说“Some of these semantics simply can't be transparent, due to underlying differences in the object models”。

问题的细节,有兴趣的同志可以参考:
http://groups.google.com/group/mozilla.dev.tech.js-engine/browse_thread/thread/6566b430328bc3ef#
https://bugzilla.mozilla.org/show_bug.cgi?id=270553

一句话,E4X虽然看上去很美,随手用用也不错,但还是存在很多问题的。并且从BE等的表态来看,至少要等到ES4之后,才有可能开始去解决这些问题。

顺便马后炮一下:我从一开始就觉得E4X有点鸡肋。。。
分享到:
评论
2 楼 hax 2007-09-10  
felixding 写道
Hi你好,你曾在我的Blog发表留言(http://www.heartstringz.net/blog/jquery-ajax-fails-in-ie/#comments),但我不是很明白具体的修改方法,肯请赐教。


你说的那个问题,从你给出的最后一个链接上的说明来看,可能是因为某个版本winxp下无法使用Microsoft.XMLHttp,实际上,根据IEBlog,应该使用MSXML2.XMLHttp.6.0和MSXML2.XMLHttp.3.0,而不要使用其他版本。所以我建议你直接修改jQuery的源码。将其中的new ActiveXObject('Microsoft.XMLHttp')改为new ActiveXObject('MSXML2.XMLHttp.3.0')试试看。至于我说的两次,是指可以用try,像这样:

try {
  xml = new ActiveXObject('MSXML2.XMLHttp.6.0')
} catch(e) {
  xml = new ActiveXObject('MSXML2.XMLHttp.3.0')
}

创建XHR,我建议你参考Sarissa的代码,或者参考以下我写的示例:
	var _req;
	if (typeof XMLHttpRequest == 'function') {
		_req = new XMLHttpRequest();
	} else if (typeof ActiveXObject == 'function') {
		_req = XMLHTTP(6) || XMLHTTP(3) || XMLHTTP(2);
		if (_req == null) throw Error('Failed to create XMLHTTP object');
	} else {
		throw Error('No XMLHttpRequest');
	}

	function XMLHTTP(version) {
		var progId;
		var v = parseInt(version);
		if (v >= 3 && v <= 6) {
			progId = 'Msxml2.XMLHTTP.' + v + '.0';
		} else if (v == 2) {
			progId = 'Microsoft.XMLHTTP';
		} else {
			return;
		}
		try {
			return new ActiveXObject(progId);
		} catch(e) {
			return null;
		}
	}
1 楼 felixding 2007-09-10  
Hi你好,你曾在我的Blog发表留言(http://www.heartstringz.net/blog/jquery-ajax-fails-in-ie/#comments),但我不是很明白具体的修改方法,肯请赐教。

相关推荐

    AI芯片是鸡肋还是真有用.pdf

    总结来说,AI芯片并非鸡肋,而是实实在在的有用技术。其在数据处理、算法效率方面的优势,使得AI芯片在图像和视频处理等领域的应用变得不可或缺。随着技术的进一步发展,AI芯片将为消费者带来更为神奇的日常应用,极...

    Spring 3.x 中文开发手册.pdf

    - **限定 Content-Type**:虽然文档认为这一功能略显鸡肋,但实际上它为处理不同类型的内容提供了更多选项。 - **URI 操作增强**:Spring 3.x 提供了更强大的 URI 处理能力,包括 UriComponents 和 ...

    Phpcms X (原PHPCMS)长期维护版

    优化修复PHPSSO代码,让PHPSSO可用、好用,不再是鸡肋 修复已知安全漏洞 修复已知BUG 增加安装时自定义后台管理登录地址 后台附件上传修改为H5上传 会员头像上传修改为H5上传 支持HTTPS 支持安装时自定义后台登录...

    iPhoneX安全区域(Safe Area)底部小黑条在微信小程序和H5的屏幕适配

    最近写小程序时,遇到了 iPhoneX 底部小黑线与内容重叠的问题,实际上是iPhoneX安全区域的适配问题,了解清楚这个问题花了挺多时间的,也实操出了结果,忍不住来总结总结。 前言 在苹果 iPhoneX 、iPhone XR等设备上...

    语音IM或为运营商的鸡肋.docx

    语音IM或为运营商的鸡肋.docx

    JavaWeb鸡肋代码生成器.zip

    JavaWeb鸡肋代码生成器是一个实用工具,专为JavaWeb开发者设计,旨在简化常见的编码工作。这个工具的主要功能是根据数据库中的数据表自动创建MVC架构的基类,从而节省开发者手动编写这些基础代码的时间。在JavaWeb...

    小程序?——奢侈品牌的鸡肋之选?.pdf

    小程序?——奢侈品牌的鸡肋之选?.pdf

    [【原创】] phpmywind多个鸡肋漏洞1

    &gt;$keyword 木有进行过滤 导致注入 直接访问 木有找到GetPage函数导致出错 注入变成鸡肋下载 (19.21 KB)2012-8-24 13:40后

    COOKIE管理上网中的COOKIE如同三国中的鸡肋

    COOKIE管理 ,上网中的COOKIE如同三国中的鸡肋 食之无味弃之可惜 多亏有了”COOKIE管理工具

    AutoDroid 魅族M9专用下载助手,鸡肋的自带下载去见鬼吧!

    魅族M9专用下载助手,鸡肋的自带下载去见鬼吧!

    电商业务成传统企业鸡肋.docx

    标题“电商业务成传统企业鸡肋”反映了传统企业在电子商务领域的困境,主要表现为投入与回报不成正比,甚至成为企业负担。以下是对这一主题的详细分析: 1. 传统企业电商挑战: - 高额投入:以美邦为例,其在电商...

    哪些跑步装备是比较鸡肋?.pdf

    以下是一些被认定为相对鸡肋的跑步装备及其详细解释: 1. 跑步机:虽然跑步机提供了室内跑步的便利,尤其对于极端天气或无法户外运动的情况,但它模拟的路面感觉并不自然,与实际路面的反馈差距较大,可能导致跑步...

    Prompt IDE来了⋯是划时代AI神器还是鸡肋?.rar

    标题中的“Prompt IDE来了⋯是划时代AI神器还是鸡肋?”暗示了这是一款与人工智能(AI)相关的集成开发环境(IDE)。IDE是程序员用于编写、调试和运行代码的软件工具,而Prompt IDE可能是专为AI开发设计的新一代平台...

    域名投资方向无用域名成鸡肋-.pptx

    本次课程主题为"域名投资方向无用域名成鸡肋",但实际上,提供的内容与域名投资无关,而是关于市场营销和渠道管理的讲座。讲座由北京创世双嘉营销管理咨询公司的董事长路长全主讲,他拥有丰富的实战经验,曾在多个...

    为什么说多线程是鸡肋?神级程序员带你真正熟练使用多线程!.docx

    【标题】:为什么说多线程是鸡肋?神级程序员带你真正熟练使用多线程! 【描述】:本文将探讨Python多线程为何被称为鸡肋,并指导如何有效利用多线程。 【标签】:Python,多线程,多进程,GIL,线程安全 【正文...

    教培行业做私域,不是“鸡肋”就是“毒药” .doc

    然而,教培行业在实践私域运营时,却面临“鸡肋”甚至“毒药”的困境。以下将深入分析这一现象。 一、教培行业的传统运营模式与私域流量的冲突 教培行业传统的运营模式主要包括市场部获取线索、电销部跟进、销售...

    BAT踏入众筹:“流量”筑起护火线金融社区城河谨防变鸡肋21.编程资料ppt

    BAT踏入众筹:“流量”筑起护火线金融社区城河谨防变鸡肋21.ppt

    实现一个鸡肋的功能————写汉字

    在IT行业中,有时候我们可能需要实现一些特殊或者有趣的功能,比如标题中提到的"实现一个鸡肋的功能——写汉字"。这个功能旨在模仿一个叫做"写汉字"的小程序,主要涉及的技术栈是JavaScript,特别是Hanzi Writer库...

    二手书平台多抓鱼聊聊他的创新功能和鸡肋功能.docx

    然而,与此同时,市场中也出现了一些对多抓鱼功能的争议和批评声,认为其中某些设计可能并不实用,甚至成为所谓的“鸡肋功能”。本文将深入探讨多抓鱼的创新功能及其潜在的不足之处,以便为用户和市场提供更为全面的...

Global site tag (gtag.js) - Google Analytics