Tôi tìm mã tuyệt vời này, được đăng bởi aemkei như câu trả lời cho câu hỏi này:Làm cách nào để bạn tải động tệp javascript từ tên miền khác?
- How do you dynamically load a javascript file? (Think C’s #include)
- Use javascript to inject script references as needed?
Bạn có thể viết động thẻ script (sử dụng thử nghiệm):
new Element("script", {src: "myBigCodeLibrary.js", type: "text/javascript"});
Vấn đề ở đây là chúng tôi không biết khi nào tệp tập lệnh bên ngoài là được tải đầy đủ.
Chúng ta thường muốn mã phụ thuộc của chúng tôi trên dòng rất tới và muốn viết cái gì đó như:
if (iNeedSomeMore){ Script.load("myBigCodeLibrary.js"); // includes code for myFancyMethod(); myFancyMethod(); // cool, no need for callbacks! }
Có một cách thông minh để tiêm script phụ thuộc mà không cần callbacks. Bạn chỉ cần kéo tập lệnh qua yêu cầu AJAX đồng bộ và đánh giá tập lệnh ở mức toàn cầu.
Nếu bạn sử dụng thử nghiệm phương pháp Script.load trông như thế này:
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); } };
tôi thấy rằng, các mã không hoạt động trên IE nếu trong số họ tất cả được thực hiện trong 'file:// 'giao thức, tuy nhiên, nó không phải là vấn đề kể từ khi trường hợp sử dụng của nó liên quan đến ứng dụng web thực sự.
Tôi đã thử một lần để bao gồm http://www.google-analytics.com/urchin.js bởi google, nhưng từ một trang web, nhưng có vẻ như nó không thể yêu cầu tệp javascript từ miền khác.
Cách chúng tôi có thể tự động thêm javascript, giống như những gì ở trên tập lệnh, nhưng từ một tên miền khác?
Tôi cho rằng chúng tôi có thể thực hiện điều này thông qua proxy ajax, tuy nhiên, đối với hầu hết trường hợp sử dụng thực tế, đây chắc chắn là câu trả lời phù hợp. ;-) Cảm ơn. – Nordin