Получите URL текущего выполнения js файл, когда динамично загружено

Таким образом, я пытаюсь загрузить сценарий динамично и выяснить путь 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);
        }); 
    }
}

9
задан Community 23 May 2017 в 10:34
поделиться

3 ответа

Когда ваш скрипт загружается с помощью jQuery (и, наверное, других фреймворков), ваш скрипт становится неотличимым от скрипта, который изначально находился в HTML-документе.

jQuery делает запрос, обращаясь к вашему скрипту, и возвращает ответ в виде текстового дочернего элемента узла