znajdę to doskonałe kodu zamieszczonych przez aemkei jako odpowiedzi na to pytanie:Jak dynamicznie ładować plik javascript z innej domeny?
- How do you dynamically load a javascript file? (Think C’s #include)
- Use javascript to inject script references as needed?
Możesz napisać tagów dynamicznych skryptów (używając prototyp):
new Element("script", {src: "myBigCodeLibrary.js", type: "text/javascript"});
Problem polega na tym, że nie mamy znać, kiedy plik skryptu zewnętrznego jest w pełni załadowany.
często chcemy nasz kod zależny od bardzo następnej linii i lubię pisać coś takiego:
if (iNeedSomeMore){ Script.load("myBigCodeLibrary.js"); // includes code for myFancyMethod(); myFancyMethod(); // cool, no need for callbacks! }
Jest inteligentny sposób wstrzyknąć skrypt zależności bez konieczności wywołań zwrotnych. Wystarczy przeciągnąć skrypt za pomocą synchronicznego żądania AJAX i wykonać eval skryptu na poziomie globalnym.
Jeśli używasz Prototype metoda Script.load wygląda następująco:
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); } };
znalazłem, że kod nie działa w IE, jeśli wszystkie z nich wykonywana jest w „file:// 'protokół, jednak nie jest to problem, ponieważ jego przypadek użycia dotyczył rzeczywistej aplikacji internetowej.
Próbowałem go raz dołączyć http://www.google-analytics.com/urchin.js przez google, ale z jednej ze strony internetowej, ale wygląda na to, że nie można zażądać pliku javascript z innej domeny.
W jaki sposób możemy dynamicznie dodawać javascript, tak jak robi to powyższe skrypty, ale z innej domeny?
Podejrzewam, że możemy to zrobić za pośrednictwem proxy ajax, jednak w przypadku większości praktycznych przypadków jest to zdecydowanie odpowiednia odpowiedź. ;-) Dzięki. – Nordin