2013-02-28 57 views
1

我使用JavaScript动态加载jQuery。为了加载jQuery,定义了回调函数并在其回调函数中调用了一些jQuery的东西。IE8 - 使用javascript回调函数的jQuery加载问题

按照预期在Firefox,Chrome和IE9中运行良好,但在IE8中给出了类似的错误消息“$未定义”表示在IE8中存在回调函数执行问题。我花了整整一天的时间找出解决方案,但没有得到任何解决办法。

<body>  
<script language="javascript" type="text/javascript"> 
    function loadjQuery(callback) { 
     var ver = getInternetExplorerVersion(); 

     var body = document.getElementsByTagName('body')[0]; 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     if (ver == 8.0) { 
      script.onload = callback.call(); 
     } 
     else { 
      script.onload = callback; 
     } 
     script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js'; 
     body.appendChild(script); 
    } 
    loadjQuery(function() { 
     alert($(window).height());  
    }); 

    function getInternetExplorerVersion() { 
     var rv = -1; 
     if (navigator.appName == 'Microsoft Internet Explorer') { 
      var ua = navigator.userAgent; 
      var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); 
      if (re.exec(ua) != null) 
       rv = parseFloat(RegExp.$1); 
     } 
     return rv; 
    } 
    </script> 
</body> 

我完全被卡住了。任何帮助将明显?

+0

只要确保你已引用jQuery库。还使用IE 8调试器转到脚本选项卡,并验证您的jQuery库是否出现,也应该在顶部。 – 2013-02-28 06:22:26

回答

1

我以前也编写此功能,下面的代码似乎可以正常使用:

  // Attach handlers for all browsers 
      script.onload = script.onreadystatechange = function() { 

       if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) { 
        done = true;       
        // callback function provided as param 
        if(success != null) 
        { 
         success(); 
        } 
        script.onload = script.onreadystatechange = null; 
        //head.removeChild(script);      
       };    
      };  
+0

谢谢老兄。它的工作:) – Priyank 2013-02-28 06:35:11