Подтвердить что ты не робот

Как получить абсолютный путь к текущему имени файла javascript

У меня есть файл javascript с именем main.js.

Внутри main.js Я хочу получить абсолютный путь к этому текущему файлу, например:

http://server/app/main.js

http://server/app/script/main.js

Каков самый быстрый способ получить абсолютный путь?

4b9b3361

Ответ 1

Вы можете исследовать коллекцию script по адресу:

var scripts = document.getElementsByTagName("script");

Для каждого элемента в возвращаемом массиве scripts вы можете получить доступ к его атрибуту src.

Текущий исполняемый файл include всегда будет последним в массиве scripts. Таким образом, вы можете получить доступ к нему в scripts[scripts.length-1].

Конечно, это будет работать только во время начального запуска кода и не будет полезно, например, внутри функции, которая вызывается после загрузки начального script, поэтому, если вам нужно значение, доступное позже, вам нужно будет сэкономить это переменной.

Ответ 2

Получить текущий путь к файлу javascript

Поместите это в свой каталог apache под /tmp и назовите его test.html. Посетите URL

localhost/grader/test.html?blah=2#foobar

JavaScript:

<html>
<script>
  alert(location.pathname);  // /tmp/test.html
  alert(location.hostname);  // localhost
  alert(location.search);    // ?blah=2
  alert(document.URL);       // http://localhost/tmp/test.html?blah=2#foobar
  alert(location.href);      // http://localhost/tmp/test.html?blah=2#foobar
  alert(location.protocol);  // http:
  alert(location.host);      // localhost
  alert(location.origin);    // http://localhost
  alert(location.hash);      // #foobar
</script>                            
</html>

Дополнительная информация об атрибутах местоположения: http://www.w3schools.com/jsref/obj_location.asp

Или, если у вас есть jquery:

<html>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js">
</script>
  $(location).attr('href');      // http://localhost/tmp/test.html?blah=2#foobar
  $(location).attr('pathname');  // /tmp/test.html
</script>
</html>

Ответ 3

Это сработает. Однако для этого требуется, чтобы вы уже знали, что такое имя файла script. Но в большинстве ситуаций вы бы это знали.

function absFileLoc(filename) {
  var scriptElements = document.getElementsByTagName('script');
  for (var i = 0; i < scriptElements.length; i++) {
    var source = scriptElements[i].src;
    if (source.indexOf(filename) > -1) {
      var location = source.substring(0, source.indexOf(filename)) + filename;
      return location;
    }
  }
  return false;
}

Ответ 4

Современный способ

Самый быстрый способ получить абсолютный путь - использовать document.currentScript

const url = document.currentScript.src;

Также для чтения компонентов URL можно использовать URL :)

const url = new URL('http://www.example.com/cats');
console.log(url.hostname); // "www.example.com"
console.log(url.pathname); // "/cats"

Все современные браузеры должны поддерживать эти методы.

Ответ 6

Я знаю, что это более старый вопрос, но по-прежнему актуальный, поскольку IE по-прежнему не предоставляет script src.

Лучшей формой для меня было дать тегу script уникальный идентификатор:

    <script id="kuvaScript" src="jscripts/kuva/kuva.min.js"></script>

Внутри script я используйте:

    var thisScript = $("#kuvaScript").attr("src");
    var thisPath = thisScript.split('/').slice(0, -1).join('/')+'/'; 

Он сохранит формат src как есть (относительный или полный) и был протестирован в IE и Chrome.

Надеюсь, это сэкономит вам много времени.

Ответ 7

Очень просто

Поместите это в файл *.js, который вы хотите получить путь:

let scripts = document.getElementsByTagName('script')
let lastScript = scripts[scripts.length -1]
console.log('lastScript', lastScript.src)

Ответ 8

Попробуйте это, если вы хотите получить текущее имя файла или каталог

location.href.split('/')[ location.href.split('/').length - 1 ];