gpt4 book ai didi

javascript - XMLHttpRequest 在 32 位机器上不起作用,IE8 标准文档模式下的 IE10

转载 作者:行者123 更新时间:2023-11-30 00:34:47 25 4
gpt4 key购买 nike

想知道以前是否有人遇到过这个奇怪的 IE/javascript 错误。

在以 IE8 标准文档模式使用 IE10 的 32 位计算机上,javascript 在尝试创建新的 XMLHttpRequest 对象时返回 TypeError。这是一个问题,因为我们的一个页面通过 X-UA-Compatible IE=8 元标记(页面的要求)强制使用 IE8 标准。

new window.XMLHttpRequest();
类型错误:对象不支持此操作

这行来自 64 位机器(IE8 标准中的 IE10)的完全相同的代码行工作得很好。

32 位 IE10 IE8 标准
32-bit IE10 IE8 standards

64 位 IE10 IE8 标准
64-bit IE10 IE8 standards

最佳答案

我在使用 angularjs 1.2.9 版时遇到了类似的问题。事实证明,angular 在检测 window.XMLHttpRequest() 的可用性方面做得不是最好。 jQuery 在他们的方法上更彻底一些。

Angular 1.2.9

function createXhr(method) {
// IE8 doesn't support PATCH method, but the ActiveX object does
/* global ActiveXObject */
return (msie <= 8 && lowercase(method) === 'patch')
? new ActiveXObject('Microsoft.XMLHTTP')
: new window.XMLHttpRequest();
}

jQuery 1.10.2

// Functions to create xhrs
function createStandardXHR() {
try {
return new window.XMLHttpRequest();
} catch( e ) {}
}

function createActiveXHR() {
try {
return new window.ActiveXObject("Microsoft.XMLHTTP");
} catch( e ) {}
}

// Create the request object
// (This is still attached to ajaxSettings for backward compatibility)
jQuery.ajaxSettings.xhr = window.ActiveXObject ?
/* Microsoft failed to properly
* implement the XMLHttpRequest in IE7 (can't request local files),
* so we use the ActiveXObject when it is available
* Additionally XMLHttpRequest can be disabled in IE7/IE8 so
* we need a fallback.
*/
function() {
return !this.isLocal && createStandardXHR() || createActiveXHR();
} :
// For all other browsers, use the standard XMLHttpRequest object
createStandardXHR;

// Determine support properties
xhrSupported = jQuery.ajaxSettings.xhr();

对我来说,解决方法是在 angular 的 createXhr 方法中添加一个检查 IE8 文档模式的附加条件:

function createXhr(method) {
// IE8 doesn't support PATCH method, but the ActiveX object does
/* global ActiveXObject */
return ((msie <= 8 && lowercase(method) === 'patch') ||
(msie >= 8 && document.documentMode == 8))
? new ActiveXObject('Microsoft.XMLHTTP')
: new window.XMLHttpRequest();
}

另一种方法是实现 jQuery 的方法,该方法查看 ActiveXObject 是否可用。如果是,则尝试创建标准的 XMLHttpRequest,如果失败,则返回到 ActiveX 替代方案。

关于javascript - XMLHttpRequest 在 32 位机器上不起作用,IE8 标准文档模式下的 IE10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27695124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com