ScriptPfad ermitteln

Danielku15

Erfahrenes Mitglied
Hallo Leute.
Ich arbeite zurzeit an einer sehr umfangreichen JavaScript Bibliothek und bin kurz vor meinem Release. Im Zuge der Usability habe ich ein jQuery Plugin entwickelt welches es ermöglicht das UserControl einfach in die Webseite einzubinden.

Mein Problem ist nun folgendes: Je nach aktivierten Features bzw. genutzten Browser werden ein Java-Applet (MidiPlayer) und/oder ein Flash-Film (Dateilader für IE) eingebettet. Diese Abhängigkeiten (swf, jar) liegen nun im selben Verzeichnis wie die Hauptscripte. Um diese nun Ordnungsgemäß in die Seite einzubetten müssen natürlich die Pfade des Flashfilms und der Jars stimmen. Meine aktuelle Lösung ist dass ich beim Scriptaufruf einen Parameter mitgeben lasse, in welchem Pfad die Dateien liegen:

Javascript:
$('div.alphaTab').alphaTab({ base: '/lib/alphatab/' });

Entsprechend dieser Angabe werden die Pfade zusammengebastelt: /lib/alphatab/alphaTab.jar und /lib/alphatab/alphaTab.flashloader.swf
Nun denke ich mir: Es ist ziemlich unpraktisch wenn man immer dafür sorgen muss dass dieser Pfad passt und es muss doch eine Möglichkeit geben einen absoluten Pfad zu dem Scriptverzeichnis zu ermitteln.

Ich dachte irgendwie daran über den DOM in allen Script-Tags nach dem zugehörigen Include zu suchen und dann einen absoluten Pfad zusammenzubasteln. Oder gibts eventuell elegantere Lösungen für dieses Problem?

Grüße
Daniel
 
Moin Daniel,

verstehe ich das recht, dass du quasi das src-Attribut deines Basis-Skriptes auslesen willst?

Falls ja: du könntest dem Skript eine ID verpassen, so kannst du es identifizieren, indem du es per getElementById() ansprichst, das erspart dir das durchsuchen aller <script>

Beachte dabei aber, wie du die src ermittelst.
Es macht da je nach Browser Unterschied ob du es so:
Code:
document.getElementById('skriptId').src
..ermittelst
oder so:
Code:
document.getElementById('skriptId').getAttribute( "src")

Nicht-IEs liefern im 1. Beispiel (zumindest lt. meinen Tests) die übersetzte absolute Adresse, also die tatsächliche URL, von der das Skript angefordert wird, während IEs(<8) dort den tatsächlich notierten Wert liefern.
Beim IE8 ist der Rückgabewert vom Rendering-Mode abhängig.

getAttribute() liefert in allen Fällen den tatsächlich notierten Wert.
 
Es geht bei meiner Frage weniger darum einfach nur ein Script Attribut auszulesen als viel mehr darum den optimalen Weg das Basisverzeichnis meines Scriptes zu ermitteln. (Eine so simple Frage wie ein Attribut auszulesen wäre doch wohl kein Forumbeitrag wert.)

Ich hab zurzeit folgenden Code welcher seine Arbeit eigentlich ganz gut erledigt. Jedoch wirkt er sehr inperformant und er deckt noch nicht alle Pfadkombinationen ab (absolute Pfadangabe mit Domain, absolter Pfad ohne Domain, relative Pfade, gesetzte Base-Tags)
Javascript:
var alphaTabBase = "";
var alphaTabTag = $('script[src$=/alphaTab.js]');
if(alphaTabTag.length)
{
    // http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/6937160715587627
    var toAbsURL = function(s) 
    {
        var l = location, h, p, f, i;
        if (/^\w+:/.test(s)) 
        {
            return s;
        }

        h = l.protocol + '//' + l.host;
        if (s.indexOf('/') == 0) 
        {
            return h + s;
        }

        p = l.pathname.replace(/\/[^\/]*$/, '');
        f = s.match(/\.\.\//g);
        if (f) 
        {
            s = s.substring(f.length * 3);
            for (i = f.length; i--;)
            {
                p = p.substring(0, p.lastIndexOf('/'));
            }
        }

        return h + p + '/' + s;
    }
    alphaTabBase = toAbsURL(alphaTabTag.attr('src'));
    alphaTabBase = alphaTabBase.substr(0, alphaTabBase.lastIndexOf('/'));
}

Aber den Code mit getAttribute() werde ich mir mal genauer anschauen. Wäre praktisch wenn ich darüber die aufgelöste URL abgreifen könnte. jQuery liefert über attr() immer den tatsächlich notierten Wert.

Gruß Daniel
 
Zuletzt bearbeitet:
Vielleicht bringt dich dies ja auf eine andere Idee:
Code:
<script id="skript" src="pfad/zum/skript.js"></script>

<script>
var toAbsURL = function(s) 
{
  var dummie=document.createElement('a');
      dummie.setAttribute('href',s);  
      return(dummie.cloneNode(true).href);
    
}
alert(toAbsURL(document.getElementById('skript').src));
</script>
 

Neue Beiträge

Zurück