Simplemente quiero la capacidad de incluir un archivo JS, pero no tenerlo evaluado en el ámbito global.Incluir archivo JS dentro del ámbito privado
He robado over labjs and requirejs, y aunque pueden hacer otras 1000 cosas, parece que tampoco es capaz de resolver este problema.
Soy consciente de que podría envolver el código de foo.js
de modo que espere un cierto contexto, y pueda actuar dentro, pero eso no es lo que estoy buscando (tener que alterar los archivos de origen). Más bien, me gustaría que los archivos JS fuente permanezcan como cualquier otro archivo JS que no necesite ningún tipo de metadato o cualquier resolución del contexto de ejecución en tiempo de ejecución mediante el código en el archivo incluido; fuera del archivo incluido, eso está bien.
Algunas demostraciones sencillas para mayor claridad:
/*
* Example 1 - apply to current context
*/
function x() {
include('foo.js'); // provides foo()
foo(); // ok!
}
foo(); // not ok!
/*
* Example 2 - apply to namespace context
*/
include.apply(ns, ['foo.js']); // provides foo()
ns.foo(); // ok!
foo(); // not ok!
sé que esto probablemente se puede lograr utilizando eval()
o creando un new Function
con la cadena, pero estoy esperando que hay una solución mejor.
Caja puede valer la pena mirar: https://code.google.com/p/google-caja/ – ide
+1 pregunta interesante, digo ir con eval. Sí eval puede ser peligroso si se usa mal, pero si hace bien el trabajo y le das un buen uso ... – Zevan