GetBaseURL() функция вызова javascript в href=""

Я вызываю основанный url через javascript на странице html, и я хочу добавить базовый url для вызова ссылки

например.

<a href="getBaseURL()/filepath/index.html">Page</a>

javascript выглядит следующим образом:

function getBaseURL() {
    var url = location.href;  // entire url including querystring - also: window.location.href;
    var baseURL = url.substring(0, url.indexOf('/', 14));

    if (baseURL.indexOf('http://localhost') != -1) {
        // Base Url for localhost
        var url = location.href;  // window.location.href;
        var pathname = location.pathname;  // window.location.pathname;
        var index1 = url.indexOf(pathname);
        var index2 = url.indexOf("/", index1 + 1);
        var baseLocalUrl = url.substr(0, index2);

        return baseLocalUrl + "/";
    }
    else {
        // Root Url for domain name
        return baseURL + "/";
    }

}

ИЗМЕНИТЬ

Его просто получить любой базовый URL из рассматриваемого домена. Кроме того, я получил этот код из учебника, поэтому любые предложения, которые потребуют меньше обработки, будут очень благодарны

SECOND EDIT

Привет всем Спасибо за ваши ответы, однако, я хочу вызвать функцию в тег html, как в <a href="getURL()/filepath/file.html></a>. Вот где проблема, я не уверен, как это сделать

Ответы

Ответ 1

function getBaseURL () {
   return location.protocol + "//" + location.hostname + 
      (location.port && ":" + location.port) + "/";
}

Edit: Addressed Mike Samuel указывает на нестандартные порты.

Ответ 2

Общее решение, позволяющее использовать <base> (или не) - дальнейшее усовершенствование заключается в том, чтобы базовый документ был удален из baseURL с использованием какого-либо регулярного выражения.

function getBaseURL () {
    var baseURL = "";
    var baseDocument = "index.html";

    if (document.getElementsByTagName('base').length > 0) {
        baseURL = document.getElementsByTagName('base')[0].href.replace(baseDocument, "");
    } else {
        baseURL = location.protocol + "//" + location.hostname + (location.port && ":" + location.port) + "/";
    }

    return baseURL;
}

Ответ 3

Я имею дело с одной и той же проблемой, и это не столько получение базового URL-адреса (как показали эти ответы), но вызов этой функции javascript из элемента, а затем добавление относительного пути. Используя ответ @Christian Sanchez и другую информацию, которую я нашел, это опция, использующая onclick элемента:

JAVASCRIPT:

<script type="text/javascript">
    function getBaseURL(loc) {
        return location.protocol + "//" + location.hostname +
           (location.port && ":" + location.port) + "/" + loc;
    }
</script>

HTML:

<a href="filepath/index.html" onclick="getBaseURL(this.href);">TEST LINK</a>

Fiddle здесь: http://jsfiddle.net/62g2bkyh/ (наведите указатель мыши на ссылку, чтобы увидеть URL-адрес в скрипте, в котором показан базовый URL-адрес iframe).