Таким образом, я пытаюсь загрузить сценарий динамично и выяснить путь 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" или "〈hostname+basepath 〉/brilliant.js"
В настоящее время brilliant.js работает на статически включенные сценарии, но не на сценарии, включенные динамично (как с $ .getScript). У кого-либо есть какие-либо идеи? Есть ли где-нибудь в dom, который хранит все сценарии, которые были загружены?
Править: Andras дал довольно хорошее решение, хотя оно, вероятно, только работает на 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);
});
}
}
Когда ваш скрипт загружается с помощью jQuery (и, наверное, других фреймворков), ваш скрипт становится неотличимым от скрипта, который изначально находился в HTML-документе.
jQuery делает запрос, обращаясь к вашему скрипту, и возвращает ответ в виде текстового дочернего элемента узла