Пути Javascript относительно файла - PullRequest
3 голосов
/ 18 апреля 2011

Я написал веб-приложение, в котором 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';
         }
    }
});

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

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

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

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

Ответы [ 3 ]

4 голосов
/ 18 апреля 2011

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

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


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

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

0 голосов
/ 16 июля 2015

Путь к файлу 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;
    }
});
0 голосов
/ 18 апреля 2011

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

  • JS запускается на стороне клиента
  • Путь JS всегда относительно:
    • HTML-страница (scripts.js в 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>
...