В 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, упомянутый выше.

316   9  

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('.');
  };
}

все, кроме IE поддерживает

document.currentScript

если у вас есть возможность использовать 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

    Ничего не найдено.