2013-02-28 31 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