Итак, я пытаюсь загрузить скрипт динамически и выяснить URL-адрес, по которому этот скрипт был загружен. Поэтому какой-то парень дал мне довольно классное решение этой проблемы, если сценарии загружены статически ( Как получить путь к файлу исполняемого в данный момент кода JavaScript ). Но мне нужно динамически загружаемое решение. Например:
$(function()
{ $.getScript("brilliant.js", function(data, textStatus)
{ // do nothing
});
});
где "brilliant.js" имеет:
var scripts = document.getElementsByTagName("script");
var src = scripts[scripts.length-1].src;
alert("THIS IS: "+src);
В идеале для этого следует либо распечатать "brilliant.js", либо "& lang; имя хоста + базовый путь & rang; /brilliant.js"
В настоящее время brilliant.js работает для статически включаемых сценариев, но не для сценариев, включаемых динамически (как с $ .getScript). У кого-нибудь есть идеи? Есть ли где-нибудь в dom, где хранятся все загруженные скрипты?
РЕДАКТИРОВАТЬ: Андрас дал довольно хорошее решение, хотя, вероятно, это работает только для jQuery. Поскольку это, наверное, самая популярная библиотека, и определенно то, что я собираюсь использовать. Вероятно, он может быть расширен и для других библиотек. Вот моя упрощенная версия:
var scriptUri;
curScriptUrl(function(x)
{ scriptUri = x;
alert(scriptUri);
});
function curScriptUrl(callback)
{ var scripts = document.getElementsByTagName("script");
var scriptURI = scripts[scripts.length-1].src;
if(scriptURI != "") // static include
{ callback(scriptURI);
}else if($ != undefined) // jQuery ajax
{ $(document).ajaxSuccess(function(e, xhr, s)
{ callback(s.url);
});
}
}