Как правильно получить contextPath из JavaScript?

Используя серверную часть на основе Java (то есть сервлеты и JSP), если мне нужен contextPath из JavaScript, какой рекомендуемый шаблон для этого и почему? Я могу придумать несколько возможностей. Я что-нибудь упустил?

1. Записать тег SCRIPT на страницу, который устанавливает его в некоторой переменной JavaScript

<script>var ctx = "<%=request.getContextPath()%>"</script>

Это верно, но требует выполнения сценария при загрузке страницы.

2. Задайте contextPath в каком-нибудь скрытом элементе DOM

<span id="ctx" style="display:none;"><%=request.getContextPath()%></span>

. Это верно и не требует выполнения сценария при загрузке страницы. Но вам нужен запрос DOM, когда нужно получить доступ к contextPath. Результат DOM-запроса можно кэшировать, если вы так заботитесь о производительности.

3. Попытайтесь выяснить это в JavaScript, изучив document.URL или тег BASE

function() {
    var base = document.getElementsByTagName('base')[0];
    if (base && base.href && (base.href.length > 0)) {
        base = base.href;
    } else {
        base = document.URL;
    }
    return base.substr(0,
        base.indexOf("/", base.indexOf("/", base.indexOf("//") + 2) + 1));
};

. Это не требует выполнения какого-либо сценария при загрузке страницы,и вы также можете кэшировать результат при необходимости. Но это работает только в том случае, если вы знаете, что ваш контекстный путь - это один каталог - в отличие от корневого каталога ( / ) или нескольких каталогов вниз ( / mypath / iscomplicated / ).

К чему я склоняюсь

Я предпочитаю скрытый элемент DOM, потому что он не требует выполнения кода JavaScript при загрузке страницы. Только когда мне понадобится contextPath, мне нужно будет что-либо выполнить (в данном случае выполнить запрос DOM).

62
задан Mike M. Lin 7 July 2011 в 18:56
поделиться