У меня есть файл javascript с именем main.js
.
Внутри main.js
Я хочу получить абсолютный путь к этому текущему файлу, например:
http://server/app/main.js
http://server/app/script/main.js
Каков самый быстрый способ получить абсолютный путь?
У меня есть файл javascript с именем main.js
.
Внутри main.js
Я хочу получить абсолютный путь к этому текущему файлу, например:
http://server/app/main.js
http://server/app/script/main.js
Каков самый быстрый способ получить абсолютный путь?
Вы можете исследовать коллекцию script по адресу:
var scripts = document.getElementsByTagName("script");
Для каждого элемента в возвращаемом массиве scripts
вы можете получить доступ к его атрибуту src
.
Текущий исполняемый файл include всегда будет последним в массиве scripts
. Таким образом, вы можете получить доступ к нему в scripts[scripts.length-1]
.
Конечно, это будет работать только во время начального запуска кода и не будет полезно, например, внутри функции, которая вызывается после загрузки начального script, поэтому, если вам нужно значение, доступное позже, вам нужно будет сэкономить это переменной.
Получить текущий путь к файлу 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>
Это сработает. Однако для этого требуется, чтобы вы уже знали, что такое имя файла 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;
}
Самый быстрый способ получить абсолютный путь - использовать 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"
Все современные браузеры должны поддерживать эти методы.
var path = document.location.pathname
предоставит текущую html-страницу.
если вы ищете текущий script, попробуйте способ, упомянутый на этом сайте:
http://bencarpenter.co.uk/javascript-path-to-the-current-script
Я знаю, что это более старый вопрос, но по-прежнему актуальный, поскольку 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.
Надеюсь, это сэкономит вам много времени.
Поместите это в файл *.js, который вы хотите получить путь:
let scripts = document.getElementsByTagName('script')
let lastScript = scripts[scripts.length -1]
console.log('lastScript', lastScript.src)
Попробуйте это, если вы хотите получить текущее имя файла или каталог
location.href.split('/')[ location.href.split('/').length - 1 ];