Quindi sto provando a caricare uno script in modo dinamico e capire il percorso dell'URL a cui è stato caricato lo script. Quindi un ragazzo mi ha dato una soluzione davvero stupenda a questo problema se gli script sono stati caricati staticamente (How to get the file-path of the currently executing javascript code). Ma ho bisogno di una soluzione caricata dinamicamente. Per esempio:Ottieni l'URL del file js attualmente in esecuzione quando caricato dinamicamente
$(function()
{ $.getScript("brilliant.js", function(data, textStatus)
{ // do nothing
});
});
dove "brilliant.js" ha:
var scripts = document.getElementsByTagName("script");
var src = scripts[scripts.length-1].src;
alert("THIS IS: "+src);
Idealmente questo dovrebbe neanche stampare "brilliant.js" o "⟨ hostname + BasePath ⟩ /brilliant.js"
Attualmente brilliant.js funziona per gli script inclusi staticamente, ma non per gli script inclusi dinamicamente (come con $ .getScript). Qualcuno ha qualche idea? C'è da qualche parte nella dom che memorizza tutti gli script che sono stati caricati?
EDIT: Andras ha fornito una soluzione piuttosto buona, anche se probabilmente funziona solo per jQuery. Dal momento che è probabilmente la libreria più popolare e sicuramente quello che userò. Probabilmente può essere esteso anche ad altre librerie. Ecco la mia versione semplificata:
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);
});
}
}
mi piace quello chamiltongt (sotto) ha detto, ajax nel codice, e quindi eval() esso. Per renderlo universalmente accessibile, perché non impostare un microsito che serve il tuo codice .js. Sarebbe centralizzato e tu sei in grado di aggiornare il tuo codice istantaneamente per ogni utente. – logout