Ajax 调用在 IE 中不起作用,除非您修改安全设置

2024-04-25

IE 有时很糟糕。直到 IE 10,IE 才提供对 XMLHttpRequest 对象的支持。相反,您必须使用 XActiveXObject 对象来运行 AJAX 调用。 JQuery 默认启动该对象,并在三元函数中维护它(如果它存在)(本质上,如果您的浏览器是 IE,则始终如此)。

但是,您已经可以看到问题了。为了使用此 ActiveX 对象,您必须修改 IE 中的安全设置,以允许 scriplet、未签名的 ActiveX schtuff 等。

有什么方法可以绕过这些安全设置(比如安装 CAB 文件来签署该该死的东西),以便最终用户不必摆弄他们的浏览器设置,并且一切都可以开箱即用?


正如您所建议的,在 Internet Explorer 中 jQuery 并不支持 ActiveX 而不是 XMLHttpRequest。相反,它检查它是否存在,然后继续检查文件 a 是否是本地文件。如果不满足其中任何一个条件,则会发出标准 XHR 请求。

jQuery.ajaxSettings.xhr = window.ActiveXObject 
    // If ActiveXObject exists, and the file is not local, return Standard XHR
    // If ActiveXObject exists, and the file is local, return ActiveXHR
    ? function() {
        return !this.isLocal && createStandardXHR() || createActiveXHR(); } 
    // If ActiveXObject doesn't exist, use StandardXHR
    : createStandardXHR;

同样的事情几乎可以这样写:

jQuery.ajaxSettings.xhr = (window.ActiveXObject && this.isLocal) 
    ? createActiveXHR() 
    : createStandardXHR();

希望这更容易理解。

我应该注意到,这在 jQuery 2.0 中发生了巨大的变化:

jQuery.ajaxSettings.xhr = function() {
    try {
        return new XMLHttpRequest();
    } catch( e ) {}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ajax 调用在 IE 中不起作用,除非您修改安全设置 的相关文章

随机推荐