Ich habe eine Klasse geschrieben, um den Pfad von Skripten zu finden, die mit verzögertem Laden und asynchronen Skript-Tags funktionieren.
Ich hatte einige Vorlagendateien, die relativ zu meinen Skripten waren. Anstatt sie hart zu codieren, habe ich die Klasse erstellt, um die Pfade automatisch zu erstellen. Die vollständige Quelle finden Sie hier auf Github.
Vor einiger Zeit hatte ich argument.callee verwendet, um etwas Ähnliches zu versuchen, aber ich habe kürzlich im MDN gelesen, dass es im strengen Modus nicht erlaubt ist .
function ScriptPath() {
var scriptPath = '';
try {
throw new Error();
}
catch(e) {
var stackLines = e.stack.split('\n');
var callerIndex = 0;
for(var i in stackLines){
if(!stackLines[i].match(/http[s]?:\/\//)) continue;
callerIndex = Number(i) + 2;
break;
}
pathParts = stackLines[callerIndex].match(/((http[s]?:\/\/.+\/)([^\/]+\.js)):/);
}
this.fullPath = function() {
return pathParts[1];
};
this.path = function() {
return pathParts[2];
};
this.file = function() {
return pathParts[3];
};
this.fileNoExt = function() {
var parts = this.file().split('.');
parts.length = parts.length != 1 ? parts.length - 1 : 1;
return parts.join('.');
};
}