Internet Explorer 8原型和XMLHttpRequest

3

我希望你能帮忙解决问题,并提醒大家Internet Explorer的原型实现仍有缺陷。

以下代码在Internet Explorer上无法运行。

XMLHttpRequest.prototype.old = XMLHttpRequest.prototype.open;
var x = new XMLHttpRequest();
x.old("POST", "test", false);

对于IE 8 beta和之前的所有版本,XMLHttpRequest.prototype属性从未存在过。在IE8中,它确实存在,但您将收到“无效的过程调用或参数”错误。Internet Explorer不喜欢修饰。

有人知道这方面的解决方法吗?

更新:

已经指出我可以通过一个新函数和构造函数覆盖整个XMLHttpRequest,然后创建一个类似XMLHttpRequest.js的包装脚本。原型方法要短得多,因此我仍然更喜欢在非IE浏览器中使用它。


你向微软报告了吗? - John Saunders
还没有。我不确定我有耐心去弄清楚微软的错误报告渠道。 - Edward Z. Yang
这个页面提供了解决方案吗? 点击这里 查看。 - KooiInc
可以说,使用原型来进行方法的精确覆盖更加优雅(30行代码对比300行)。话虽如此,如果我想支持IE浏览器,我可能需要按照那个页面的建议去做。 - Edward Z. Yang
我不会着急,我认为我看到了一个没有评论就关闭的报告。 - Ross
我会说那就是解决方案。感谢您的回答! - Edward Z. Yang
1个回答

2
问题似乎是IE 8可以识别XMLHttpRequest,但不能作为函数使用。Active X对象仍然可以使用。我测试的时候并不是通过检测window.XMLHtppRequest的存在性,而是通过typeof window.XMLHtppRequest来进行测试。这种方式似乎可行。
我的get请求重新编码如下:
FG.ajax.getxhr = function(){
var xhr;
if (typeof window.XMLHttpRequest === 'function') {
    xhr  = XMLHttpRequest();
}
else {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr; 

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