zoukankan      html  css  js  c++  java
  • 高效地获取XMLhttp对象2

    查看了一下jQuery与dojo的源码,发现IE7在window.location.protocol === "file:" 的情况下是不能用原生XMLHttpRequest的。不过它们两者的代码都有些瑕疵。dojo1.4的问题在于每次调用其_xhrObj都要检测一遍要用何种方式生成XMLHttp对象,另,它犯了一个错误,浏览器是不支持ProgID为“Msxml2.XMLHTTP.4.0”的ActiveXObject对象,但支持它没有列举出来的ProgID为“Msxml2.XMLHTTP.6.0”的ActiveXObject对象,即使是IE6,只要安装了特定的补丁,就能使用它,要不,它只能使用ProgID为“Msxml2.XMLHTTP”的ActiveXObject对象。而这个错误恰好是jQuery犯了,当然这也不能说错误,对于IE6,jQuery永远使用IE5.5的ActiveXObject("Msxml2.XMLHTTP")。看下面源码:

    xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?
    			function() {
    				return new window.XMLHttpRequest();
    			} :
    			function() {
    				try {
    					return new window.ActiveXObject("Microsoft.XMLHTTP");
    				} catch(e) {}
    			},
    

    假若当前浏览器为IE8,但window.location.protocol === "file:" 那么jQuery依然会用IE5.5的ActiveXObject(" Msxml2.XMLHTTP")。这是非常不合常理的,因为IE8已经修复这个bug,并且增添了许多新的特性。由于IE7的问题,我原来的惰性函数取XMLhttp对象的方式已经行不通。嘛,要实现隋性函数的效果,我们还有自动执行函数,下面是我的新方法:

          var xhr ;
          (function(){
            var s = ["XMLHttpRequest",
              "ActiveXObject('Msxml2.XMLHTTP.6.0')",
              "ActiveXObject('Msxml2.XMLHTTP.3.0')",
              "ActiveXObject('Msxml2.XMLHTTP')",
              "ActiveXObject('Microsoft.XMLHTTP')"];
            //使用eval大法防止IE的条件编译在压缩时被删掉
            if(eval("''+/*@cc_on"+" @_jscript_version@*/-0") === 5.7 &&
              location.protocol === "file:"){
              s.shift();
            }
            for(var i = 0 ; i< s.length;i++){
              try{
                if(eval("new "+s[i])){
                  xhr = s[i]
                  break;
                }
              }catch(e){}
            }
          })();
          var getXhr = new Function( "return new "+xhr)
          
    

  • 相关阅读:
    《海量数据库解决方式》读后感
    HDU-3533-Escape(BFS)
    (017)将一棵二叉查找树重构成链表(keep it up)
    hadoop招聘需求每天都在添加,短短半个月时间,需求量差点儿翻了一番,这是大数据要爆发的节奏么?
    关于Oracle安装完毕后,登录时遇到的错误的解决的方法
    C/C++产生随机数
    android手机SD卡中的android_secure目录
    【Unity Shaders】Lighting Models —— 衣服着色器
    ASM相关视图
    win2003的IIS無法使用,又一次安裝提示找不到iisadmin.mfl文件
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1716486.html
Copyright © 2011-2022 走看看