В JavaScript - как я могу получить URL-адрес скрипта вызывается?
Я включаю myscript.js в файле http://site1.com/index.html такой:
<script src=http://site2.com/myscript.js></script>
внутри " myscript.js", я хочу получить доступ к URL"http://site2.com/myscript.js". я хотел бы иметь что-то вроде этого:
function getScriptURL() {
// something here
return s
}
alert(getScriptURL());
что бы предупредить"http://site2.com/myscript.js " если вызывается из индекса.html, упомянутый выше.
9 ответов:
от http://feather.elektrum.org/book/src.html:
var scripts = document.getElementsByTagName('script'); var index = scripts.length - 1; var myScript = scripts[index];переменная
myScriptтеперь есть элемент сценария dom. Вы можете получить url src с помощьюmyScript.src.обратите внимание, что это должно выполняться как часть начальной оценки скрипта. Если вы хотите не загрязнять пространство имен Javascript, вы можете сделать что-то вроде:
var getScriptURL = (function() { var scripts = document.getElementsByTagName('script'); var index = scripts.length - 1; var myScript = scripts[index]; return function() { return myScript.src; }; })();
вы можете добавить атрибут id к тегу скрипта (даже если он находится внутри тега head):
<script id="myscripttag" src="http://site2.com/myscript.js"></script>и затем доступ к его src следующим образом:
document.getElementById("myscripttag").srcв поле значение ID должно быть одинаковым для каждого документа, который содержит ваш скрипт, но я не думаю, что это большое неудобство для вас.
С DOM и querySelector вы можете взять для конкретного скрипта:
var dir = document.querySelector('script[src$="myscript.js"]').getAttribute('src'); var name = dir.split('/').pop(); dir = dir.replace('/'+name,"");
Я написал класс, чтобы найти get путь скриптов, который работает с задержкой загрузки и асинхронными тегами скриптов.
У меня были некоторые файлы шаблонов, которые были относительно моих скриптов, поэтому вместо жесткого кодирования их я создал класс, чтобы автоматически создавать пути. полный источник находится здесь, на github.
некоторое время назад я использовал аргументы.callee попробовать и сделать что-то подобное, но я недавно прочитал на MDN, что это не допускается в строгом режим.
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('.'); }; }
если у вас есть возможность использовать jQuery, то код будет выглядеть так:
$('script[src$="/myscript.js"]').attr('src');
простое и понятное решение, которое работает очень хорошо:
Если это не IE вы можете использовать
document.currentScript
Для IE вы можете сделатьdocument.querySelector('script[src*=myscript.js]')
Итак:getScriptURL(){ var script = document.currentScript || document.querySelector('script[src*=myscript.js]') return script.src }
следующий код позволяет найти элемент скрипт с именем
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; } }
вы не можете использовать местоположение.href или местоположения.хост, а затем добавить имя скрипта?
Comments