2012-10-19 66 views
1

我發現只包含javascripts的小javascript腳本只有在它們之前沒有包含。包括javascripts無法正常工作

這是與我自己的腳本,但與兩個第三方庫它不工作,我真的不知道爲什麼。

var included_files = new Array(); 
    function include_once(script_filename) { 
     if (!in_array(script_filename, included_files)) { 
      included_files[included_files.length] = script_filename; 
      include_dom(script_filename); 
     } 
    } 
    function in_array(needle, haystack) { 
     for (var i = 0; i < haystack.length; i++) { 
      if (haystack[i] == needle) { 
       return true; 
      } 
     } 
     return false; 
    } 
    function include_dom(script_filename) { 
     var html_doc = document.getElementsByTagName('head').item(0); 
     var js = document.createElement('script'); 
     js.setAttribute('language', 'javascript'); 
     js.setAttribute('type', 'text/javascript'); 
     js.setAttribute('src', script_filename); 
     html_doc.appendChild(js); 
     return false; 
    } 

function loaded() { 
    include_once("shared/scripts/jquery.min.js"); 
    include_once("shared/scripts/iscroll.js"); 

    $(document).ready(function() { 
     alert("hello"); 
    }); 
} 

錯誤:$未定義。 如果我以常規方式導入jQuery,並且它說「iScroll」未定義(因爲我稍後使用它)。

任何想法?

回答

2

有人說回調?

function include_once(script_filename, callback) { 
     if (!in_array(script_filename, included_files)) { 
      included_files[included_files.length] = script_filename; 
      include_dom(script_filename, callback); 
     } 
    } 

function include_dom(script_filename, callback) { 
    var html_doc = document.getElementsByTagName('head').item(0); 
    var js = document.createElement('script'); 
    js.setAttribute('language', 'javascript'); 
    js.setAttribute('type', 'text/javascript'); 
    js.setAttribute('src', script_filename); 
    if(callback && callback != 'undefined'){ 
     js.onload = callback; 
     js.onreadystatechange = function() { 
      if (this.readyState == 'complete') callback(); 
     } 
    } 
    html_doc.appendChild(js); 
    return false; 
} 

function loaded() { 
    include_once("shared/scripts/jquery.min.js", function(){ 
     $(document).ready(function() { 
      alert("hello"); 
     }); 
    }); 
    include_once("shared/scripts/iscroll.js"); 
} 
+0

非常感謝! 腳本必須替換爲「js」,但一切正常。 –

4

您正在將腳本添加到DOM,但在嘗試使用它們提供的功能之前不會讓它們加載。

您需要將回調綁定到正在添加的腳本元素的加載事件。

(至少在大多數瀏覽器中,您可能必須在其他瀏覽器中實施一些攻擊;您可能希望檢查jQuery getScript方法的源代碼)。

+0

感謝您的幫助。 –

7

include_dom是異步的。它並行加載腳本,並且不能確定何時加載腳本。您嘗試在開始下載後立即使用jQuery,這不起作用。

您需要使用腳本來允許您爲加載的腳本指定回調。我會推薦require.js

+0

你怎麼看它是異步的? 我可以改變方法嗎? –

+0

感謝您的幫助和意見! –

2

使用腳本加載器。 yepnope將盡你所能做的一切和更多

+0

感謝您分享鏈接可能會有用 – Devjosh

+0

感謝您的鏈接 –