Trovo questo codice eccellente, pubblicato da aemkei come risposte a questa domanda:Come si carica dinamicamente un file javascript da un dominio diverso?
- How do you dynamically load a javascript file? (Think C’s #include)
- Use javascript to inject script references as needed?
Si può scrivere dinamica tag script (usando Prototype):
new Element("script", {src: "myBigCodeLibrary.js", type: "text/javascript"});
Il problema qui è che non siamo a conoscenza di quando il file di script esterno è completamente caricato.
spesso si vuole il nostro codice dipende linea molto vicino e piace scrivere qualcosa di simile:
if (iNeedSomeMore){ Script.load("myBigCodeLibrary.js"); // includes code for myFancyMethod(); myFancyMethod(); // cool, no need for callbacks! }
C'è un modo intelligente per iniettare script di dipendenze, senza la necessità di callback. Devi semplicemente estrarre lo script tramite una richiesta sincrona AJAX e valutare lo script a livello globale.
Se si utilizza il metodo Prototype Script.load assomiglia a questo:
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); } };
ho scoperto che, il codice non funziona su IE se la di loro tutto viene eseguito in 'file:// 'protocollo, tuttavia, non è il problema dal momento che il suo caso d'uso riguardava un'applicazione web reale.
ho provato una volta per includere http://www.google-analytics.com/urchin.js da Google, ma da una pagina web, ma sembra che non si può richiedere file javascript da diverso dominio.
Come è possibile aggiungere in modo dinamico javascript, proprio come avviene negli script precedenti, ma da un altro dominio?
Penso che potremmo farlo tramite proxy ajax, tuttavia, per la maggior parte dei casi di utilizzo pratico, questa è sicuramente la risposta appropriata. ;-) Grazie. – Nordin