Пути Javascript относительно файла

Я написал веб-приложение, в котором файл JS содержит множество относительных вызовов других файлов. До этого момента это работало, но теперь я использую этот файл js со страниц в разных каталогах и получаю ошибки с путями. Это веб-приложение будет установлено на множестве разных хостов, поэтому я не знаю, будут ли работать абсолютные пути, поскольку я не знаю, где оно установлено. Я также не хочу сбрасывать js с большим количеством предустановленных переменных в моих путях (но, возможно, придется).

Я хотел бы, чтобы пути js относились к самому файлу js, а не к открывающему его документу... есть ли способ установить корневой каталог по умолчанию в файле js?

$.ajax({
    type: "POST",
    url: "inc/alert.php",
    success: function(msg){
        if(msg){
            window.location.href = 'inc/logoff.php?timeout=true';
         }
    }
});

Это моя файловая структура, но я не знаю, где она будет установлена ​​или как будет называться папка webapp:

/random-folder/web-app/inc/script.js

И до сих пор все мои файлы, использующие js, находились в папке «веб-приложение»… но теперь у меня есть другие страницы, вызывающие его в разных папках, и все пути не работают. Есть ли способ сделать это? Или есть хотя бы способ получить путь к самому файлу js?

Заранее благодарю за любую помощь...


person RANGER    schedule 18.04.2011    source источник


Ответы (3)


К сожалению, это не просто возможно.

Однако вы можете попробовать найти тег <script> в HTML-документе и проанализировать его местоположение. Вместе с location.href вы можете создать абсолютный URL-адрес сценария.


Однако, поскольку вы вызываете сценарии PHP, которые явно не принадлежат папке JS, ваша проблема вообще не должна быть проблемой. Ваши вызовы AJAX будут относиться к документу, содержащему сценарии, и вы, вероятно, знаете путь к своим сценариям PHP из этого документа.

Обновление: просто прочитайте, что файлы из разных папок используют эти скрипты. В этом случае метод синтаксического анализа тега script на самом деле является способом, если вы не хотите просто устанавливать переменную, содержащую путь, вручную.

person ThiefMaster    schedule 18.04.2011

Вы можете найти путь к файлу JS, проверив атрибут src в его теге <script> в текущем документе.

HTML:

<script src="/some/random/path/main.js"></script>

jQuery:

var scriptFilename = 'main.js';
var rootPath = ''; // Will contain the path to your file

$('script').each(function() {
    var $script = $(this);

    if ($script.attr('src') && $script.attr('src').indexOf(scriptFilename) > -1) {
        rootPath = $script.attr('src').split(scriptFilename)[0];

        return false;
    }
});
person Thomas Higginbotham    schedule 16.07.2015

Невозможно получить абсолютный путь по двум причинам:

  • JS запускается на стороне клиента
  • The JS path is always relative to:
    • The HTML page (scripts.js in xyz.com/test/index.php => xyz.com/test/scripts.js)
    • Корень документа сервера (/scripts.js в xyz.com/test/index.php => xyz.com/scripts.js)

В качестве решения вы можете:

  • Либо загрузите свой JS из PHP, например: <script type="text/javascript" src="scripts.php"></script>
  • Или перед загрузкой файла сценариев загрузите файл конфигурации, как в варианте 1, например: <script type="text/javascript" src="config.php"></script><script type="text/javascript" src="scripts.js"></script>
person Christian    schedule 18.04.2011