Javascript 请求不';IE8/9中不能与CORS一起工作,默默地失败
我有一个关于Prototype在IE浏览器<10的情况下处理CORS的问题。我注意到,在IE9中,对Ajax.Request的调用会以静默方式失败,检查服务器的访问日志很明显,甚至从未发出请求 经过一些阅读,IE8/9似乎必须使用自己的Javascript 请求不';IE8/9中不能与CORS一起工作,默默地失败,javascript,xmlhttprequest,internet-explorer-9,prototypejs,xdomainrequest,Javascript,Xmlhttprequest,Internet Explorer 9,Prototypejs,Xdomainrequest,我有一个关于Prototype在IE浏览器
XDomainRequest
对象才能启用CORS,然而Prototype的Ajax.getTransport
函数返回XMLHttpRequest
对象,我知道IE8/9中不允许CORS
对于同一个问题,它告诉我这可能也是原型的问题,我只是找不到任何关于它的帖子
我已经实现了一个黑客修复程序:
…但我想知道是否有人(或原型本身)有更好的解决方案?基于该方法的来源:
var Ajax = {
getTransport: function() {
return Try.these(
function() {return new XMLHttpRequest()},
function() {return new ActiveXObject('Msxml2.XMLHTTP')},
function() {return new ActiveXObject('Microsoft.XMLHTTP')}
) || false;
}
}
您可以看到,getTransport
将尝试返回列出的每个传输的新实例。因此,您可以实现预先添加XDomainRequest
的polyfill
var _getTransport = Ajax.getTransport;
Ajax.getTransport = function() {
return Try.these(
function() { return new XDomainRequest() },
_getTransport
) || false;
};
如果您在包含prototype和首先使用Ajax.Request之间插入这段代码,它应该尽可能无缝地使用XDR
N.B.这是完全未经测试的,几乎肯定有一些边缘情况-我不确定XDR的行为对于相同的域请求是什么。这里有一个合并的拉请求,有助于使CORS请求工作。它不在1.7.1版本中,但您可以从github repo进行构建,也可以使用这个非官方的构建!但是,该请求似乎解决了所有浏览器中Prototype和CORS的问题,但没有解决IE8/9问题,IE8/9问题特别涉及那些版本中无法处理跨域请求的
XMLHttpRequest
对象,而Prototype似乎并不能解释这一点。你的权利——我会看看我是否能得到一个一起处理XDomainRequest
对象的请求。
var _getTransport = Ajax.getTransport;
Ajax.getTransport = function() {
return Try.these(
function() { return new XDomainRequest() },
_getTransport
) || false;
};