Hola a todos, he estado tratando de juntar una función genérica que recupera la URL absoluta de un archivo JavaScript que se ejecuta en una página web:conseguir el URL de la ejecución de archivo JavaScript (IE6-7 problema en su mayoría)
Básicamente se llega a llamar a algo como esto:
getScriptName(function(url) {
console.log(url);
// http://www.example.com/myExternalJsFile.js
});
dentro de un archivo JavaScript externo en una página y luego puede hacer algo con él (como encontrar la etiqueta <script>
que lo ha cargado, por ejemplo).
Funciona de maravilla en casi todos los navegadores que he probado (Firefox, Chrome, Safari, Opera v10 al menos e IE 8).
Parece fallar, sin embargo, en IE 6 y 7. La función de devolución de llamada se ejecuta, pero el nombre recuperado es la URL de la página HTML principal, no el archivo JavaScript. Continuando con el ejemplo, getScriptName
invoca la devolución de llamada con el parámetro: http://www.example.com/index.html
Así que todo lo que realmente te pido es que si hay alguna otra manera de conseguir la URL del archivo actual de JavaScript (que podría ser IE 6 y 7 hackery específica)? ¡Gracias por adelantado!
EDIT: Además, esto no va a funcionar en todos los casos, por lo que no recomiendo:
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length-1].src;
me gustaría que funcione en el caso de etiquetas de script creados dinámicamente (posiblemente no colocado al final de la página), también conocido como carga lenta.
Código y pregunta agradables. Aunque no conozco una respuesta a esto, solo quiero darte algunas optimizaciones: puedes cambiar cada 'obj ['prop']' a 'obj.prop' y como 'typeof' siempre devuelve una cadena, no es necesario probar la identidad ('==='); probar la igualdad ('==') es lo suficientemente bueno. Estos funcionan ligeramente mejor que las cosas en tu código. –
Gracias. Ya, sé que puedo reemplazar obj ['prop'] por obj.prop, simplemente lo tenía de esa manera en preparación para enviar la función al compilador de cierres de Google, lo que destruiría esos nombres de variables. Sin embargo, voy a cambiar el === a a==, ¡gracias! – TooTallNate
Acabo de probar el acceso a 'obj ['prop']' contra 'obj.prop', pero al contrario de lo que pensaba, en Firefox la diferencia era insignificante, mientras que en Chrome la primera era en realidad * más rápida * que la última . Estoy realmente sorprendido por esto, podría tener algo que ver con la 'compilación' de JavaScript por V8. –