Napisałem klasę, aby znaleźć ścieżkę skryptów, które działają z opóźnionym ładowaniem i tagami skryptu asynchronicznego.
Miałem kilka plików szablonów, które były względne w stosunku do moich skryptów, więc zamiast na sztywno je kodować, stworzyłem klasę do automatycznego tworzenia ścieżek. Pełne źródło jest tutaj na github.
Jakiś czas temu użyłem arguments.callee, aby spróbować zrobić coś podobnego, ale ostatnio przeczytałem w MDN, że nie jest to dozwolone w trybie ścisłym .
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('.');
};
}