Pfad zur Script-Datei im Script ermitteln
nam
- javascript
Hi
Gibt es eine einfacher Möglichkeit als
function getLocation() {
var s=document.scripts,i=0,p,t;
while(t=s[i++].src) {
p=t.indexOf('Hyphenator.js');
if(p!=-1) {
return t.substring(0,p);
}
}
}
um den Pfad zu einem Script zu ermitteln? Scheint mir ziemlich umständlich.
Hintergrund:
Eines meiner Javascripte lädt dynamisch Komponenten nach, die im selben Ordner liegen, wie das Script. Ich muss das so machen, weil erst zur Laufzeit bekannt wird, welche Komponenten benötigt werden. Bis jetzt habe ich den Pfad zum Ordner in der Form
var BASEPATH='http://example.com/weg/zum/script';
~~~fix einprogrammiert.
Das ist mühsam, wenn ich das Script statt auf dem Server auf dem localhost laufen lasse; ich muss dann jedesmal diese Zeile anpassen.
Deshalb habe ich mir die obige Funktion geschrieben.
Gruss,
nam
Gibt es eine einfacher Möglichkeit als
Läuft das bei dir im Firefox? Bei mir ist document.scripts undefiniert.
Es gibt nur kompliziertere Lösungen.
Struppi.
Hi
Läuft das bei dir im Firefox? Bei mir ist document.scripts undefiniert.
Ups! – falsche Version. Müsste so lauten:
function getLocation() {
var s=document.getElementsByTagName('script'),i=0,p,t;
while(t=s[i++].src) {
p=t.indexOf('Dateiname.js');
if(p!=-1) {
return t.substring(0,p);
}
}
}
Es gibt nur kompliziertere Lösungen.
Na dann…
Danke dir!
Läuft das bei dir im Firefox? Bei mir ist document.scripts undefiniert.
Ups! – falsche Version. Müsste so lauten:
genau so handhabe ich das bisher auch und geht meines Wissens Browserübergreifend auch nicht anders.
Struppi.
Hi
Tja, dann lass ich das so.
Es hat mich einfach gewundert, dass man mit Javascript die Adresse des HTML-Dokuments bestimmen kann, nicht aber die des Scripts selbst. Aber wenn ich mir überlege, wie der Browser die Seite lädt, ist das ja irgendwie logisch ;-/ (Fragen ist einfacher als nachdenken!)
Danke euch beiden für die Antwort(en).
Mathias
Hallo,
Du kannst mal http://ejohn.org/blog/__file__-in-javascript/ verfolgen. (Halte ich allerdings nicht für zuverlässig, ist immer Engine-bezogen.)
Mathias
Hi
(function(){
this.__defineGetter__("__FILE__", function() {
return (new Error).stack.split("\n")[2].split("@")[1].split(":").slice(0,-1).join(":");
});
})();
Interessanter Ansatz, den uns John da vorstellt. Vor allem aber, weil ich jetzt erst verstehe wozu man __defineGetter__ brauchen kann!
Brauchbar ist es aber noch nicht.
Danke für den Hinweis. Habe den Blog jetzt auch abonniert ;-)
Gruss,
Mathias