run - javascript test browser
Obteniendo la URL de la ejecución del archivo JavaScript(problema IE6-7 en su mayorÃa) (2)
Hola a todos, he estado intentando juntar una función genérica que recupera la URL absoluta de un archivo JavaScript en ejecución en una página web:
Básicamente puedes 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 cargó, por ejemplo).
Funciona muy bien en casi todos los navegadores que he probado (Firefox, Chrome, Safari, Opera v10 al menos e IE 8).
Sin embargo, parece fallar 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
Entonces, todo lo que realmente pregunto es si hay alguna otra forma de obtener la URL del archivo JavaScript actual (que podría ser una piratería específica de IE 6 y 7). ¡Gracias por adelantado!
EDITAR: Además, esto no funcionará en todos los casos, así que no lo recomiendo:
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length-1].src;
Me gustaría que funcionara en el caso de etiquetas de script creadas dinámicamente (posiblemente no colocadas en último lugar en la página), también conocidas como carga lenta.
Lo siento, sospecho que podría tener problemas con esto. IE antes de la versión 8 suele dar mensajes de error de errores de javascript de la forma:
line: 342
char: 3
error: expected identifier, string or number
code: 0
url: http://example.com/path/to/resource
donde la url es window.location.href, en lugar de la URL del recurso Javascript externo que contiene el problema. Sugiero que IE proporcione un valor de URL poco útil ya que la URL del script no está disponible para IE en ese momento, y tampoco está disponible para cualquier Javascript que pueda escribir para intentar mostrarlo.
Me encantaría poder enlazar a las notas de la versión de IE8 que dicen que este error / característica se ha corregido, de ahí la razón por la que creé esto como wiki de la comunidad. Mi MSDN foo es bastante débil!
Mucho de esto depende de a lo que tengas acceso. Si, como parece, está intentando hacer esto completamente dentro del código JS, no creo que pueda hacerlo, por algunas de las razones que se muestran arriba. Podrías obtener el 90% del camino tal vez, pero no ser definitivo.
Si está trabajando en un entorno dotnet (que es el único que conozco), sugeriría el uso de un módulo que intercepte todas las solicitudes JS y agregue en ellas la ubicación de la solicitud, o algo por el estilo.
Creo que es necesario abordar esto desde el lado del servidor, no desde el lado del cliente. No creo que tenga una respuesta definitiva del lado del cliente. Creo que también tendrá dificultades para obtener una respuesta del lado del servidor, pero podría ser más exitoso.