#javascript
#javascript
Вопрос:
Я пытаюсь найти абсолютный путь к моему файлу javascript (не URL). Вместо жесткого кодирования абсолютных путей я бы предпочел использовать относительные пути. Например:
/static/js/index.js
/static/config/1.json
/static/config/2.json
Если я смогу получить абсолютный путь index.js
, то я буду только ../config/
вдали от доступа к любому из двух файлов json.
При поиске SO и в Интернете я либо получаю предложения по поиску URL-адреса, которые работают, но не решают мою проблему. Или для путей к файлам, используя windows.location.pathname
, но любая его перестановка, которую я пытаюсь, либо возвращает пустую строку, либо /
.
var currentDirectory = window.location.pathname.split('/').slice(0, -1).join('/');
console.log("Curr dir: " currentDirectory);
(Возвращает пустую строку)
var location = window.location.pathname;
var directoryPath = location.substring(0, location.lastIndexOf("/") 1);
console.log(" dirPath: " directoryPath);
(Возвращает a /
)
Я надеюсь на что-то вроде:
var absolute_path = window.function.absolute.path()
Что вернет, скажем: /u/user/develop/project/server/static/js/index.js
Из которого я мог бы: (снова псевдокод)
var locations = absolute_path.split("js");
# location[0] = "/u/user/develop/project/server/static"
# location[1] = "js/index.js"
var config_file_locations = locations[0] "config/";
var absolute_path_json1 = config_file_locations "1.json"
— РЕДАКТИРОВАТЬ —
Хорошо, просмотр window.location
его возвращает URL-адрес так ясно, что это не ответ здесь.
Комментарии:
1. Забыл добавить, что мне интересно, просто ли это невозможно, потому что это нарушило бы модель безопасности. Этот код будет выполняться на сервере tornado в локальной сети. Он никогда не будет доступен в Интернете. Кроме того, Javascript не является моей сильной стороной, как вы, возможно, можете сказать.
2. Ты шутишь? Вы хотите, чтобы браузер сообщал вам, какой файл что-то было на сервере? Часто это не файл, это просто что-то в памяти. URL — это все, с чем вам нужно работать из браузера.
3. Используя python в качестве примера,
os.path.abspath()
возвращает абсолютный путь. Но это звучит как index.js не знает, из какого пути / папки он запускается?4. python не запускается в браузере; JS-движок браузера не предоставляет доступ ни к своей собственной файловой системе, ни (очевидно) к файловой системе сервера
5. Правда, я использовал его только в качестве примера. Будет ли что-то подобное существовать для javascript, я не был уверен. Но, основываясь на ответе @quentin, я думаю, что то, что мне нужно, на самом деле невозможно.
Ответ №1:
/static/js/index.js
это абсолютный путь. Вы можете сказать, потому что он начинается с a /
, который возвращает его в корень веб-сайта.
У браузера нет автоматического способа сообщить что-либо о том, как веб-сервер определил, как он сгенерировал контент для данного URL.
Все, что знает браузер, это то, что он запросил сервер /static/js/index.js
, и сервер ответил некоторым JavaScript.
Сервер мог прочитать статический файл, и этот файл мог находиться в вызываемом каталоге, js
и этот каталог мог быть подкаталогом вызываемого static
… но тогда сервер мог взять весь URL-адрес, использовать его в запросе к базе данных и извлечь результаты из базы данных … или он мог проксироватьзапрос к другому HTTP-серверу на другом компьютере на другом континенте.
Если вы хотите, чтобы ваш клиентский JS знал что-либо о структуре файловой системы на HTTP-сервере, вам нужно каким-то образом предоставить ему эту информацию. Он не может получить его из браузера.