我覺得這個優秀的代碼,由aemkei張貼回答這個問題:如何動態加載來自不同域的javascript文件?
- How do you dynamically load a javascript file? (Think C’s #include)
- Use javascript to inject script references as needed?
您可以編寫動態腳本標記 (使用原型):
new Element("script", {src: "myBigCodeLibrary.js", type: "text/javascript"});
這裏的問題是我們不知道 何時外部腳本文件是 滿載。
我們經常要我們對 非常下一行相關的代碼,並喜歡寫 類似:
if (iNeedSomeMore){ Script.load("myBigCodeLibrary.js"); // includes code for myFancyMethod(); myFancyMethod(); // cool, no need for callbacks! }
有注入腳本 的依賴,而不需要 回調一個聰明的辦法。您只需通過同步AJAX請求 拉動 腳本並在全局級別上評估該腳本。
如果使用原型的Script.load 方法是這樣的:
var Script = { _loadedScripts: [], include: function(script){ // include script only once if (this._loadedScripts.include(script)){ return false; } // request file synchronous var code = new Ajax.Request(script, { asynchronous: false, method: "GET", evalJS: false, evalJSON: false }).transport.responseText; // eval code on global level if (Prototype.Browser.IE) { window.execScript(code); } else if (Prototype.Browser.WebKit){ $$("head").first().insert(Object.extend( new Element("script", {type: "text/javascript"}), {text: code} )); } else { window.eval(code); } // remember included script this._loadedScripts.push(script); } };
我發現,如果所有的人都在「文件執行的代碼不能在IE瀏覽器:/ /'協議,但它不是問題,因爲它的用例涉及真正的Web應用程序。
我試過一次,包括http://www.google-analytics.com/urchin.js谷歌,但從網頁之一,但它看起來像它不能請求來自不同域的JavaScript文件。
我們如何動態地添加javascript,就像上面的腳本一樣,但是來自另一個域?
我想我們可以通過ajax代理來做到這一點,但是,對於大多數實際使用情況來說,這絕對是合適的答案。 ;-) 謝謝。 – Nordin 2009-04-26 22:51:04