2010-08-23 14 views
8

¿Cómo puede saber un archivo javascript dónde se encuentra? Por ejemplo:¿Cómo obtener la ubicación (src) de un archivo javascript?

<script type="text/javascript" src="http://mysite.com/scripts/howdy.js"></script> 

¿Cómo puede el código en howdy.js saber sobre http://mysite.com/scripts/howdy.js?

Editar: Aclaración. No puedo confiar en que busque DOM en mi etiqueta de script porque necesito saberlo antes de que DOM esté listo.

+2

Tengo curiosidad, ¿por qué necesitas esta información? – tenfour

+0

posible duplicado de [¿Cómo puedo obtener el nombre de archivo del script desde ese script?] (Http://stackoverflow.com/questions/710957/how-might-i-get-the-script-filename-from-within-that -script) –

+1

@tenfour - Hay otras secuencias de comandos que howdy.js puede obtener desde el mismo directorio y no puedo estar seguro de dónde se alojará howdy.js (prueba, prod, qa, host del cliente, etc.). No es increíble, pero es un requisito comercial. @Marcel - Sí, tienes razón, es un dup. Pero lo dejaré porque no pude encontrar esa respuesta con los términos de búsqueda que utilicé. –

Respuesta

13

En el momento en el que se está ejecutando el script actual, será la última script elemento en el DOM, por lo tanto, se puede obtener por:

var scripts = document.getElementsByTagName('script'), 
    currentScriptSrc = scripts[scripts.length-1].src; 

Marque esta example que carga este script.

Editar: Teniendo en cuenta la Observación de la @ de kangax, sobre las async y defer atributos, la única manera segura de la OMI, previamente conocer el nombre del archivo, habría que inspeccionar las script elementos de la página, el examen de su atributo src , algunas librerías como Scriptaculous.us utilizan esta técnica, por ejemplo:

var scripts = document.getElementsByTagName('script'), 
    len = scripts.length, 
    re = /howdy\.js$/, 
    src, howdyScriptSrc; 

while (len--) { 
    src = scripts[len].src; 
    if (src && src.match(re)) { 
    howdyScriptSrc = src; 
    break; 
    } 
} 
​ 
+0

Genial, no sabía que se le garantizaba esta información. Pero parece consistente en todos los navegadores que he probado. ¡Gracias! –

+1

Considere el comentario de Kangax que me condujo aquí: http://twitter.com/kangax/status/22208127507 – zachleat

+1

@zachleat: ¡Gracias! Sí, olvidé por completo los atributos diferir y asincrónico. – CMS

0

Probar:

document.scripts[document.scripts.length-1]; // add .src to get href 
//or 
document.getElementsByTagName("script")[document.getElementsByTagName("script").length-1]; 
//for (maybe) better compatibility 

que obtiene la última secuencia de comandos en el DOM. Si su script se está ejecutando mientras se está cargando, devolverá el elemento correcto.

Guárdelo en una variable para usar en funciones que se usarán más adelante.

var thisScript = document.scripts[document.scripts.length-1]; 
1

Dar esta etiqueta script un id, y escribir:

var src = document.getElementById('scriptID').attributes['src']; 
1

Prueba esto:

function getScriptSourceName(name){ 
    var scripts = document.getElementsByTagName('script'); 
    for (i=0;i<scripts.length;i++){ 
     if (scripts[i].src.indexOf(name) > -1) 
      return scripts[i].src; 
    } 
} 

getScriptSourceName('howdy.js'); 
Cuestiones relacionadas