2009-11-10 39 views
9

Duplicar posible:
What is my script src URL?¿Cómo puedo obtener la URL del archivo JS en el mismo archivo JS?

tengo situación:

<script 
    type="text/javascript" 
    src="http://server/some.js"> 
</script> 

En archivo some.js Necesito saber la ruta completa del mismo archivo some.js , eq. "http://server/some.js". ¿Cómo puedo hacer esto?

No puedo cambiar el código HTML (los clientes incluyen el archivo JS).

+0

Ver http://stackoverflow.com/questions/984510/what-is-my-script-src-url –

Respuesta

7

intentar que uno

sc = document.getElementsByTagName("script"); 

for(idx = 0; idx < sc.length; idx++) 
{ 
    s = sc.item(idx); 

    if(s.src && s.src.match(/some\.js$/)) 
    { return s.src; } 
} 
+0

+1, enfoque muy agradable. –

+3

Tomasz, ¿me falta algo o dónde inicias SC? Además, la OMI todo está más limpio si agrega la palabra clave var antes de idx = 0 y s. Buena pieza de código, de lo contrario. –

+0

Tom Bartel - tenías razón fijo y thx para la sugerencia en ese – sbczk

0

No asegurarse de que funciona en todos los navegadores, por intentar esto:

function getScriptFileName() { 
    return (new Error).fileName; 
} 
+1

Lamentablemente no, el objeto 'Error' no está normalizado y' fileName' solo parece existir en Mozilla. – bobince

+0

Parece que no funciona en Safari. – Sutra

9

La forma más sencilla es sólo para buscar la última secuencia de comandos para ser añadido al documento :

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

Esto tiene que hacerse en el cuerpo principal del script, no en el código llamado más tarde. Preferiblemente, hágalo al inicio del script y recuerde la variable para que pueda usarse en llamadas a funciones posteriores si es necesario, y así no se ve afectado por el código más adelante en el script insertando ningún nuevo nodo <script> en el documento.

+0

QUE es genio! –

+0

¿Hace esto con el atributo async también? – Eric

Cuestiones relacionadas