Dołączam myscript.js do pliku w http://site1.com/index.html
ten sposób:
<script src=http://site2.com/myscript.js></script>
Wewnątrz „myscript.js” chcę uzyskać dostęp do adresu URL „ http://site2.com/myscript.js ”. Chciałbym mieć coś takiego:
function getScriptURL() {
// something here
return s
}
alert(getScriptURL());
Który ostrzegłby „ http://witryna2.com/myscript.js ”, gdyby został wywołany z pliku index.html wspomnianego powyżej.
javascript
MikeC8
źródło
źródło
Odpowiedzi:
Z http://feather.elektrum.org/book/src.html :
var scripts = document.getElementsByTagName('script'); var index = scripts.length - 1; var myScript = scripts[index];
Zmienna
myScript
ma teraz element script dom. Adres URL src można uzyskać za pomocąmyScript.src
.Należy pamiętać, że musi to zostać wykonane jako część wstępnej oceny skryptu. Jeśli nie chcesz zanieczyszczać przestrzeni nazw Javascript, możesz zrobić coś takiego:
var getScriptURL = (function() { var scripts = document.getElementsByTagName('script'); var index = scripts.length - 1; var myScript = scripts[index]; return function() { return myScript.src; }; })();
źródło
document.getElementsByTagName("head")[0].appendChild(scriptElement);
src
zwracany jest nieprawidłowy .Możesz dodać atrybut id do swojego tagu skryptu (nawet jeśli znajduje się wewnątrz tagu head):
<script id="myscripttag" src="http://site2.com/myscript.js"></script>
a następnie uzyskaj dostęp do jego źródła w następujący sposób:
document.getElementById("myscripttag").src
oczywiście wartość id powinna być taka sama dla każdego dokumentu zawierającego twój skrypt, ale nie sądzę, żeby była to dla ciebie duża niedogodność.
źródło
.src
może zwrócić ścieżkę bezwzględną, nawet jeśli została określona ścieżka względna. Możesz użyć.getAttribute('src')
Wszystko oprócz IE obsługuje
document.currentScript
źródło
document.currentScript.src
.Napisałem klasę, aby znaleźć ścieżkę skryptów, które działają z opóźnionym ładowaniem i tagami skryptu asynchronicznego.
Miałem kilka plików szablonów, które były względne w stosunku do moich skryptów, więc zamiast na sztywno je kodować, stworzyłem klasę do automatycznego tworzenia ścieżek. Pełne źródło jest tutaj na github.
Jakiś czas temu użyłem arguments.callee, aby spróbować zrobić coś podobnego, ale ostatnio przeczytałem w MDN, że nie jest to dozwolone w trybie ścisłym .
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('.'); }; }
źródło
jeśli masz szansę skorzystać z jQuery, kod wyglądałby tak:
$('script[src$="/myscript.js"]').attr('src');
źródło
Proste i nieskomplikowane rozwiązanie, które działa bardzo dobrze:
Jeśli nie jest to IE, możesz użyć
document.currentScript
dla IE, możesz to zrobić
document.querySelector('script[src*="myscript.js"]')
:
function getScriptURL(){ var script = document.currentScript || document.querySelector('script[src*="myscript.js"]') return script.src }
źródło
Poniższy kod pozwala znaleźć element skryptu o podanej nazwie
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; } }
źródło
Nie możesz użyć pliku location.href lub location.host, a następnie dołączyć nazwę skryptu?
źródło