Incluyo myscript.js en el archivo http://site1.com/index.html
como este:
<script src=http://site2.com/myscript.js></script>
Dentro de "myscript.js", quiero obtener acceso a la URL " http://site2.com/myscript.js ". Me gustaría tener algo como esto:
function getScriptURL() {
// something here
return s
}
alert(getScriptURL());
Lo que alertaría " http://site2.com/myscript.js " si se llama desde el index.html mencionado anteriormente.
javascript
MikeC8
fuente
fuente
Respuestas:
De http://feather.elektrum.org/book/src.html :
var scripts = document.getElementsByTagName('script'); var index = scripts.length - 1; var myScript = scripts[index];
La variable
myScript
ahora tiene el elemento dom del script. Puede obtener la URL src usandomyScript.src
.Tenga en cuenta que esto debe ejecutarse como parte de la evaluación inicial del script. Si desea no contaminar el espacio de nombres de Javascript, puede hacer algo como:
var getScriptURL = (function() { var scripts = document.getElementsByTagName('script'); var index = scripts.length - 1; var myScript = scripts[index]; return function() { return myScript.src; }; })();
fuente
document.getElementsByTagName("head")[0].appendChild(scriptElement);
src
se devuelve el error .Puede agregar el atributo id a su etiqueta de secuencia de comandos (incluso si está dentro de una etiqueta de cabeza):
<script id="myscripttag" src="http://site2.com/myscript.js"></script>
y luego acceda a su src de la siguiente manera:
document.getElementById("myscripttag").src
por supuesto, el valor de id debería ser el mismo para todos los documentos que incluyan su script, pero no creo que sea un gran inconveniente para usted.
fuente
.src
puede devolver una ruta absoluta, incluso si se especificó una ruta relativa. Puede usar.getAttribute('src')
Todo excepto IE admite
document.currentScript
fuente
document.currentScript.src
.Escribí una clase para encontrar la ruta de los scripts que funciona con la carga retrasada y las etiquetas de scripts asíncronos.
Tenía algunos archivos de plantilla que eran relativos a mis scripts, así que en lugar de codificarlos, creé la clase para crear las rutas automáticamente. La fuente completa está aquí en github.
Hace un tiempo usé argumentos.callee para intentar hacer algo similar, pero recientemente leí en el MDN que no está permitido en modo estricto .
function ScriptPath() { var scriptPath = ''; try { //Throw an error to generate a stack trace throw new Error(); } catch(e) { //Split the stack trace into each line var stackLines = e.stack.split('\n'); var callerIndex = 0; //Now walk though each line until we find a path reference for(var i in stackLines){ if(!stackLines[i].match(/http[s]?:\/\//)) continue; //We skipped all the lines with out an http so we now have a script reference //This one is the class constructor, the next is the getScriptPath() call //The one after that is the user code requesting the path info (so offset by 2) callerIndex = Number(i) + 2; break; } //Now parse the string for each section we want to return 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('.'); }; }
fuente
si tiene la oportunidad de usar jQuery, el código se vería así:
$('script[src$="/myscript.js"]').attr('src');
fuente
Solución simple y sencilla que funciona muy bien:
Si no es IE, puede usar
document.currentScript
Para IE, puede hacerlo
document.querySelector('script[src*="myscript.js"]')
:
function getScriptURL(){ var script = document.currentScript || document.querySelector('script[src*="myscript.js"]') return script.src }
fuente
El siguiente código le permite encontrar el elemento de script con el nombre de pila
var scripts = document.getElementsByTagName( 'script' ); var len = scripts.length for(var i =0; i < len; i++) { if(scripts[i].src.search("<your JS file name") > 0 && scripts[i].src.lastIndexOf("/") >= 0) { absoluteAddr = scripts[i].src.substring(0, scripts[i].src.lastIndexOf("/") + 1); break; } }
fuente
¿No puede usar location.href o location.host y luego agregar el nombre del script?
fuente