XMLHttpRequest() 和 ActiveXObject("Microsoft.XMLHTTP") 有什么区别?

5

微软最终在Internet Explorer 7中添加了本地XMLHttpRequest对象,但我发现它可以在Internet选项对话框中被禁用。那么使用XMLHttpRequest()与ActiveXObject("Microsoft.XMLHTTP")相比有什么好处呢?

如果它可以被禁用,这意味着我们必须永远保持浏览器兼容性检查,是吗?XMLHttpRequest()是否比ActiveXObject("Microsoft.XMLHTTP")初始化更快?为什么微软会添加它并使其成为可选项?


可能是为了兼容Firefox特定页面而设计的吗? - Xinus
@Rubens Farias,这是我的意图。我只使用IE7+(没有其他浏览器),所以我真的想知道是否应该检查XMLHttpRequest还是直接使用ActiveXObject()。 - Andy E
如果您只使用IE7+,则可以直接使用XmlHttpRequest进行工作,只需在try/catch中捕获安全异常即可,这意味着它被直接或间接禁用。如果您选择ActiveX方法,请注意内部实现与加载的DOM不兼容(需要进行转换),速度较慢,并且经常被禁用。 - Abel
@Abel:谢谢,我想这就是我要找的答案,XMLHttpRequest和Microsoft.XMLHTTP不是同一件事吗? - Andy E
1
是的,它非常不同。例如,XHR可以理解JS中的this,并且可以通过prototype或普通自定义属性进行扩展,而ActiveX则不可能。性能要好得多,其安全性与ActiveX分离。已更新属性以反映XHR标准(当然,IE总会有一些问题,但这是另一回事)。简而言之:它是DOM和JS的一致部分,而不是某个外部对象,请参见:http://msdn.microsoft.com/en-us/library/ms537505(VS.85).aspx#_id - Abel
2个回答

5
ActiveXObject也可以被禁用。请注意,其他浏览器也可以禁用此设置和其他设置。这不是关于浏览器兼容性的问题,而是关于用户偏好的问题。用户可以允许/禁止跨域请求,可以允许/禁止脚本,可以允许或不允许Flash等。
您始终需要检查当用户禁用您需要的某些浏览器功能时,您的页面是否仍然运行顺畅(或优雅地回退)。
好消息是:它默认情况下是启用的,大多数用户将其开启。
更新:默认情况下,XmlHttpRequest检索的对象不支持脚本和外部请求(即使用XSLT的document()xsl:include或XML中的外部实体),必须显式启用。这与非IE浏览器不同,在非IE浏览器中,XHR加载的文档允许外部请求(或者像Safari和Chrome一样不存在)。

1
好消息是:它默认启用,大多数用户都会开启它。这就是我问问题的原因,我发现我的一个用户没有打开它,导致应用程序失败。直到那时我甚至没有意识到它可以被禁用。 - Andy E

2
这只是我的猜测,但我认为他们允许禁用它的原因与他们允许禁用JavaScript的原因相同。一些人认为风险(隐私、安全等)大于收益,因此希望禁用它。

如果连ActiveXObject一起禁用,我可以理解这个问题。但实际上你可以禁用XMLHttpRequest并仍然使用ActiveXObject("Microsoft.XMLHttpRequest")。 - Andy E

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接