Я включаю 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 ", если вызывается из index.html, упомянутого выше.
javascript
MikeC8
источник
источник
Ответы:
Из 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; }; })();
источник
document.getElementsByTagName("head")[0].appendChild(scriptElement);
src
возвращается ошибка .Вы можете добавить атрибут id в свой тег скрипта (даже если он находится внутри тега head):
<script id="myscripttag" src="http://site2.com/myscript.js"></script>
а затем доступ к его src следующим образом:
document.getElementById("myscripttag").src
конечно, значение id должно быть одинаковым для каждого документа, который включает ваш скрипт, но я не думаю, что это будет для вас большим неудобством.
источник
.src
может возвращать абсолютный путь, даже если был указан относительный путь. Можно использовать.getAttribute('src')
Все, кроме IE, поддерживает
document.currentScript
источник
document.currentScript.src
.Я написал класс, чтобы найти путь к скриптам, который работает с отложенной загрузкой и асинхронными тегами скриптов.
У меня были некоторые файлы шаблонов, относящиеся к моим сценариям, поэтому вместо их жесткого кодирования я создал класс для автоматического создания путей. Полный исходный код находится здесь, на github.
Некоторое время назад я использовал arguments.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"]')
это:
function 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; } }
источник
Разве вы не можете использовать location.href или location.host, а затем добавить имя скрипта?
источник