2009-11-10 6 views
9

Possible en double:
What is my script src URL?Comment puis-je obtenir l'URL du fichier JS dans le même fichier JS?

je Situation:

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

Dans le fichier some.js Je dois savoir le chemin complet du même fichier some.js , éq. "http://server/some.js". Comment puis-je faire ceci?

Je ne peux pas modifier le code HTML (les clients incluent le fichier JS).

+0

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

Répondre

7

essayer que l'on

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, très belle approche. –

+3

Tomasz, il me manque quelque chose ou où initialisez-vous sc? En outre, IMO le tout est plus propre si vous ajoutez le mot-clé var avant idx = 0 et s. Beau morceau de code, sinon. –

+0

Tom Bartel - vous aviez raison fixe et thx pour le tip sur ce – sbczk

0

Je ne sais pas cela fonctionne dans tous les navigateurs, par essayez ceci:

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

Tristement non, l'objet 'Error' n'est pas normalisé et' fileName' semble seulement exister dans Mozilla. – bobince

+0

Semble ne fonctionne pas dans Safari. – Sutra

9

La façon la plus simple est juste de chercher le dernier script à ajouter au document :

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

Ceci doit être fait dans le corps principal du script, pas dans le code appelé plus tard. De préférence, faites-le au début du script et souvenez-vous de la variable afin qu'elle puisse être utilisée dans les appels de fonction ultérieurs si nécessaire, et qu'elle ne soit pas affectée par le code insérant de nouveaux noeuds <script> dans le document.

+0

est génial! –

+0

Est-ce que cela a aussi avec l'attribut asynchrone? – Eric

Questions connexes