Por lo tanto, intento cargar un script dinámicamente y averiguar la ruta de URL en la que se cargó ese script. Entonces, un tipo me dio una solución bastante impresionante a este problema si los scripts están cargados estáticamente (How to get the file-path of the currently executing javascript code). Pero necesito una solución cargada dinámicamente. Por ejemplo:Obtenga la url del archivo js actualmente en ejecución cuando se carga dinámicamente
$(function()
{ $.getScript("brilliant.js", function(data, textStatus)
{ // do nothing
});
});
donde "brilliant.js" tiene:
var scripts = document.getElementsByTagName("script");
var src = scripts[scripts.length-1].src;
alert("THIS IS: "+src);
Lo ideal es que sea imprimir "brilliant.js" o "⟨ nombre de host + basePath ⟩ /brilliant.js"
Actualmente brilliant.js funciona para scripts incluidos estáticamente, pero no para scripts incluidos dinámicamente (como con $ .getScript). ¿Alguien tiene alguna idea? ¿Hay algún lugar en el dom que almacene todos los scripts que se han cargado?
EDITAR: Andras dio una solución bastante buena, aunque probablemente solo funcione para jQuery. Dado que esa es probablemente la biblioteca más popular, y definitivamente lo que voy a usar. Probablemente también se puede extender para otras bibliotecas. Aquí está mi versión simplificada:
var scriptUri;
curScriptUrl(function(x)
{ scriptUri = x;
alert(scriptUri);
});
function curScriptUrl(callback)
{ var scripts = document.getElementsByTagName("script");
var scriptURI = scripts[scripts.length-1].src;
if(scriptURI != "") // static include
{ callback(scriptURI);
}else if($ != undefined) // jQuery ajax
{ $(document).ajaxSuccess(function(e, xhr, s)
{ callback(s.url);
});
}
}
Me gusta lo que dijo chamiltongt (abajo), ajax en el código y luego eval() it. Para que sea universalmente accesible, ¿por qué no configurar un micrositio que sirva su código .js? Estaría centralizado y podrá actualizar su código para cada usuario instantáneamente. – logout