Ich füge myscript.js http://site1.com/index.html
wie folgt in die Datei ein :
<script src=http://site2.com/myscript.js></script>
In "myscript.js" möchte ich Zugriff auf die URL " http://site2.com/myscript.js " erhalten. Ich hätte gerne so etwas:
function getScriptURL() {
// something here
return s
}
alert(getScriptURL());
Was " http://site2.com/myscript.js " alarmieren würde, wenn es von der oben erwähnten index.html aufgerufen würde .
javascript
MikeC8
quelle
quelle
Antworten:
Von http://feather.elektrum.org/book/src.html :
var scripts = document.getElementsByTagName('script'); var index = scripts.length - 1; var myScript = scripts[index];
Die Variable hat
myScript
jetzt das Skript dom-Element. Sie können die src-URL mithilfe von abrufenmyScript.src
.Beachten Sie, dass dies im Rahmen der anfänglichen Evaluierung des Skripts ausgeführt werden muss. Wenn Sie den Javascript-Namespace nicht verschmutzen möchten, können Sie Folgendes tun:
var getScriptURL = (function() { var scripts = document.getElementsByTagName('script'); var index = scripts.length - 1; var myScript = scripts[index]; return function() { return myScript.src; }; })();
quelle
document.getElementsByTagName("head")[0].appendChild(scriptElement);
src
wird zurückgegeben.Sie können Ihrem Skript-Tag ein ID-Attribut hinzufügen (auch wenn es sich in einem Head-Tag befindet):
<script id="myscripttag" src="http://site2.com/myscript.js"></script>
und dann Zugriff auf seine src wie folgt:
document.getElementById("myscripttag").src
Natürlich sollte der ID-Wert für jedes Dokument, das Ihr Skript enthält, gleich sein, aber ich denke nicht, dass dies eine große Unannehmlichkeit für Sie ist.
quelle
.src
ein absoluter Pfad zurückgegeben werden kann, selbst wenn ein relativer Pfad angegeben wurde. Sie können verwenden.getAttribute('src')
Alles außer IE unterstützt
document.currentScript
quelle
Ich habe eine Klasse geschrieben, um den Pfad von Skripten zu finden, die mit verzögertem Laden und asynchronen Skript-Tags funktionieren.
Ich hatte einige Vorlagendateien, die relativ zu meinen Skripten waren. Anstatt sie hart zu codieren, habe ich die Klasse erstellt, um die Pfade automatisch zu erstellen. Die vollständige Quelle finden Sie hier auf Github.
Vor einiger Zeit hatte ich argument.callee verwendet, um etwas Ähnliches zu versuchen, aber ich habe kürzlich im MDN gelesen, dass es im strengen Modus nicht erlaubt ist .
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('.'); }; }
quelle
Wenn Sie die Möglichkeit haben, jQuery zu verwenden, sieht der Code folgendermaßen aus:
$('script[src$="/myscript.js"]').attr('src');
quelle
Einfache und unkomplizierte Lösung, die sehr gut funktioniert:
Wenn es nicht IE ist, können Sie
document.currentScript
Für IE können Sie dies tun
document.querySelector('script[src*="myscript.js"]')
:
function getScriptURL(){ var script = document.currentScript || document.querySelector('script[src*="myscript.js"]') return script.src }
quelle
Mit dem folgenden Code können Sie das Skriptelement mit dem angegebenen Namen finden
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; } }
quelle
Können Sie nicht location.href oder location.host verwenden und dann den Skriptnamen anhängen?
quelle