IE中“启用本机XMLHTTP支持”选项的目的是什么?

What is the purpose of "Enable native XMLHTTP support" option in IE

本文关键字:选项 是什么 支持 XMLHTTP 启用 本机 启用本机 IE      更新时间:2023-09-26

我们的网站使用AJAX调用并使用XMLHTTPRequest来实现这一点。当客户端在一天中使用单个 IE 实例并在该 IE 中计数导航和引用页面时,我们最终会出现内存不足异常并被迫关闭 IE。

通过启用IE的Advnaced选项卡中的选项Enable native XMLHTTP support可以解决此问题。由于我们更喜欢本机XMLHTTP对象而不是ActiveXObject,因此异常可能是由于使用ActiveXObject引起的。但仍然不确定根本原因是什么,或者是否有其他更好的方法来解决问题。我们使用IE8。我们从未在其他浏览器(火狐和铬)中遇到过任何此类问题。谢谢

启用本机 XMLHTTP 支持意味着浏览器将不提供 MSXML。HttpRequest 但相反的窗口。XMLHttp请求符合标准。但是,我们成功地使用了这两个版本,没有任何泄漏,所以我想一定是您的代码中的一些实现问题 - 我只是猜测,但固定 MSXML。DOMNodes 上的 HttpRequest 实例(通过事件侦听器)可能会导致这种情况。

IE中的"启用本机XMLHTTP支持"选项,不出所料,使IE为XMLHTTPRequest提供本机支持。如果不启用此功能,则只能将旧版 ActiveX 绑定到 IE 中的 MSXML 库。我猜您使用了一些库,该库为缺少本机支持(设置关闭或仅具有旧界面的旧IE)或手动回退到MSXML的情况提供跨浏览器处理。由于 MSXML 绑定是 JavaScript 的外来接口,因此从 JS 外部引入的对象可以在很多地方与本机对象形成交叉引用,不允许 JS 或 ActiveX 垃圾回收器回收它们,因为它们不通信并且找不到这样的循环引用。

在我看来,最好的解决方案是建议IE7用户始终使用此选项(它实际上没有缺点),而忘记旧浏览器。如果这不是某个选项,请尝试递归清除在回退代码中创建的所有 MSXML 对象。

本质上,由于HTML DOM,JavaScript执行引擎和XMLHTTPRequest对象之间的循环引用,您正在泄漏XMLHTTPRequest对象。

您需要在请求完成时取消挂钩事件并取消引用 XMLHttp 对象。(要取消引用它们,请确保没有 JavaScript 对象或变量引用它们,包括 onClick 处理程序中的少量脚本等。

启用本机 XMLHTTPRequest 意味着外部组件被排除在循环之外,因此 DOM 能够管理请求生存期本身。

另请参阅@PeterAronZentai的回答。