Javascript Internet Explorer 8原型和XMLHttpRequest
这部分是为了解决问题,部分是为了让人们知道InternetExplorer的原型实现仍然存在缺陷 以下代码在Internet Explorer上不起作用Javascript Internet Explorer 8原型和XMLHttpRequest,javascript,html,internet-explorer,internet-explorer-8,xmlhttprequest,Javascript,Html,Internet Explorer,Internet Explorer 8,Xmlhttprequest,这部分是为了解决问题,部分是为了让人们知道InternetExplorer的原型实现仍然存在缺陷 以下代码在Internet Explorer上不起作用 XMLHttpRequest.prototype.old = XMLHttpRequest.prototype.open; var x = new XMLHttpRequest(); x.old("POST", "test", false); 对于IE 8 beta版和所有以前的版本,XMLHttpRequest.prototype属性从一开
XMLHttpRequest.prototype.old = XMLHttpRequest.prototype.open;
var x = new XMLHttpRequest();
x.old("POST", "test", false);
对于IE 8 beta版和所有以前的版本,XMLHttpRequest.prototype属性从一开始就不存在。在IE8中,它确实存在,但您将得到一个“无效的过程调用或参数”错误。Internet Explorer不喜欢装饰
有人知道这方面的解决方法吗
更新:
有人指出,我可以用一个新函数和构造函数覆盖整个XMLHttpRequest,然后创建一个包装器脚本ala XMLHttpRequest.js。prototype方法要短得多,所以我还是更愿意在非IE浏览器中使用它。问题似乎是IE 8识别XMLHttpRequest,但不是作为一个函数。活动X对象似乎仍在工作。我没有测试window.XMLHtppRequest的存在性,而是测试window.XMLHtppRequest的类型。看起来不错 我将get请求重新编码如下:
FG.ajax.getxhr = function(){
var xhr;
if (typeof window.XMLHttpRequest === 'function') {
xhr = XMLHttpRequest();
}
else {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
return xhr;
您是否已将此报告给Microsoft?还没有。我不确定我是否有耐心找出微软的bug报告渠道。我能提供一个解决方案吗?可以说,使用prototype通过手术覆盖方法要优雅得多(30行对300行)。这就是说,如果我想支持IE,我可能必须按照页面上的建议去做。我不会着急,我想我看到了一份没有评论的报告。