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

#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-сервере, вам нужно каким-то образом предоставить ему эту информацию. Он не может получить его из браузера.