2010-08-23 3 views
8

Wie kann eine Javascript-Datei wissen, wo sie sich befindet? Zum Beispiel:Wie bekomme ich den Speicherort (src) einer Javascript-Datei?

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

Wie kann der Code in howdy.js wissen über http://mysite.com/scripts/howdy.js?

Bearbeiten: Klarstellung. Ich kann mich nicht darauf verlassen, das DOM nach meinem Skript-Tag zu durchsuchen, weil ich darüber Bescheid wissen muss, bevor das DOM bereit sein kann.

+2

Ich bin neugierig, warum brauchst du diese Info? – tenfour

+0

mögliches Duplikat von [Wie kann ich den Skriptdateinamen innerhalb dieses Skripts erhalten?] (Http://stackoverflow.com/questions/710957/how-might-i-get-the-script-filename-from-within-that -script) –

+1

@tenfour - Es gibt andere Skripte, die howdy.js aus dem gleichen Verzeichnis beziehen können und ich kann nicht sicher sein, wo howdy.js gehostet wird (test, prod, qa, Client-Host, etc). Es ist nicht großartig, aber es ist eine Geschäftsanforderung. @Marcel - Ja, Sie haben Recht, es ist ein dup. Aber ich überlasse es, da ich diese Antwort mit den verwendeten Suchbegriffen nicht finden konnte. –

Antwort

13

In dem Moment, in dem das aktuelle Skript ausgeführt wird, wird das letzte script Element im DOM sein, daher können Sie erhalten durch:

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

prüfen diese example, die diese script lädt.

Edit: in Berücksichtigung des Kommentars des @ kangax, über die async und defer Attribute, die nur IMO sichere Art und Weise, die zuvor die Dateinamen zu kennen, wäre es, die script Elemente auf der Seite zu prüfen, sein src Attributs Prüfung einige Bibliotheken wie Scriptaculous.us diese Technik verwenden, zum Beispiel:

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

Cool, wusste nicht, dass Sie diese Informationen garantiert haben. Aber es scheint in jedem Browser konsistent zu sein, den ich ausprobiert habe. Vielen Dank! –

+1

Betrachte Kangax's Kommentar, der mich hierher geführt hat: http://twitter.com/kangax/status/22208127507 – zachleat

+1

@zachleat: Danke !, Ja, ich habe die Verzögerungs- und asynchronen Attribute komplett vergessen. – CMS

0

Versuchen:

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

welches das letzte Skript im DOM bekommt. Wenn Ihr Skript während des Ladens ausgeführt wird, wird das richtige Element zurückgegeben.

Speichern Sie es in einer Variablen für die Verwendung in Funktionen, die später verwendet werden.

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

Geben Sie diesen Script-Tag eine ID und schreiben:

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

starten:

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'); 
Verwandte Themen