Ответ 1
function getBaseURL () {
return location.protocol + "//" + location.hostname +
(location.port && ":" + location.port) + "/";
}
Edit: Addressed Mike Samuel указывает на нестандартные порты.
Я вызываю основанный 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>
. Вот где проблема, я не уверен, как это сделать
function getBaseURL () {
return location.protocol + "//" + location.hostname +
(location.port && ":" + location.port) + "/";
}
Edit: Addressed Mike Samuel указывает на нестандартные порты.
Общее решение, позволяющее использовать <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;
}
Я имею дело с одной и той же проблемой, и это не столько получение базового 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).