Ответ 1
Этот поможет вам...
var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
В joomla php я могу использовать $this->baseurl
для получения базового пути, но я хотел получить базовый путь в jquery.
Базовый путь может быть любым из следующих примеров:
http://www.example.com/
http://localhost/example
http://www.example.com/sub/example
Также может измениться example
.
Этот поможет вам...
var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
Я думаю, это будет хорошо для вас
var base_url = window.location.origin;
var host = window.location.host;
var pathArray = window.location.pathname.split( '/' );
Это получит базовый url
var baseurl = window.location.origin+window.location.pathname;
Это невозможно из javascript, потому что это свойство на стороне сервера. Javascript на клиенте не может знать, где установлен Joomla. Лучший вариант - как-то включить значение $this->baseurl
в javascript страницы, а затем использовать это значение (phpBaseUrl
).
Затем вы можете создать URL-адрес следующим образом:
var loc = window.location;
var baseUrl = loc.protocol + "//" + loc.hostname + (loc.port? ":"+loc.port : "") + "/" + phpBaseUrl;
Я столкнулся с этой необходимостью в нескольких проектах Joomla. Самый простой способ, которым я нашел обращение, - добавить скрытое поле ввода в мой шаблон:
<input type="hidden" id="baseurl" name="baseurl" value="<?php echo $this->baseurl; ?>" />
Когда мне нужно значение в JavaScript:
var baseurl = document.getElementById('baseurl').value;
Не так интересно, как использовать чистый JavaScript, но просто и выполняет свою работу.
var getUrl = window.location;
var baseurl = getUrl.origin; //or
var baseurl = getUrl.origin + '/' +getUrl.pathname.split('/')[1];
Но вы не можете сказать, что baseurl() CodeIgniter (или php joomla) вернет то же значение, так как можно изменить baseurl в файле .htaccess этих платформ.
Например:
Если у вас есть файл .htaccess на вашем локальном хосте:
RewriteEngine on
RewriteBase /CodeIgniter/
RewriteCond $1 !^(index.php|resources|robots.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
$this-> baseurl() вернет http://localhost/CodeIgniter/
У меня была такая же проблема некоторое время назад, я просто нуждался в базовом URL. Здесь много подробных опций, но чтобы обойти это, просто используйте объект window.location
. На самом деле введите это в консоли браузера и нажмите Enter, чтобы выбрать там свои параметры. Ну для моего случая это было просто:
window.location.origin
Я бы порекомендовал всем создавать базовый тег HTML в разработке, а затем динамически назначать href, поэтому при работе с любым хостом, который использует клиент, он автоматически добавляется к нему:
<html>
<title>Some page title</titile>
<script type="text/javascript">
var head = document.getElementsByTagName('head')[0];
var base = document.createElement("base");
base.href = window.document.location.origin;
head.appendChild(base);
</script>
</head>
...
Поэтому, если вы находитесь в localhot: 8080, вы получите доступ ко всем связанным или ссылочным файлам из базы, например: http://localhost:8080/some/path/file.html
Если вы находитесь на www.example.com, он будет быть http://www.example.com/some/path/file.html
Также обратите внимание, что в каждой локации вы не должны использовать ссылки, такие как globs в hrefs, например: Родительская локация вызывает http://localhost:8080/
not http://localhost:8080/some/path/
.
Сделайте вид, что вы ссылаетесь на все гиперссылки как на полные предложения без базового URL.
Формат имени хоста/пути/поиска
Таким образом, URL-адрес:
var url = window.location.hostname + window.location.pathname + window.location.hash
Для вашего случая
window.location.hostname = "stackoverflow.com"
window.location.pathname ="/questions/25203124/how-to-get-base-url-with-jquery-or-javascript"
window.location.hash = ""
Таким образом, в основном baseurl = hostname = window.location.hostname
window.location.origin+"/"+window.location.pathname.split('/')[1]+"/"+page+"/"+page+"_list.jsp"
почти так же, как ответ Джениша, но немного короче.
Самый простой способ получить базовый URL в JQuery
window.location.origin
Вот что-то быстрое, что также работает с file://
URLs.
Я придумал эту строку:
[((1!=location.href.split(location.href.split("/").pop())[0].length?location.href.split(location.href.split("/").pop())[0]:(location.protocol,location.protocol+"//" + location.host+"/"))).replace(location.protocol+"//"+location.protocol+"//"+location.protocol+"://")]
Я был только на той же сцене, и это решение работает для меня
В представлении
<?php
$document = JFactory::getDocument();
$document->addScriptDeclaration('var base = \''.JURI::base().'\'');
$document->addScript('components/com_name/js/filter.js');
?>
В js файле вы получаете доступ к base
как к переменной, например, в вашем сценарии:
console.log(base) // will print
// http://www.example.com/
// http://localhost/example
// http://www.example.com/sub/example
Я не помню, где я беру эту информацию, чтобы дать кредит, если я найду ее, я отредактирую ответ
var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
Вы упомянули, что example.com
может измениться, поэтому я подозреваю, что на самом деле вам нужен базовый url, чтобы иметь возможность использовать относительную запись пути для ваших скриптов. В этом конкретном случае нет необходимости использовать скрипты - вместо этого добавьте базовый тег в свой заголовок:
<head>
<base href="http://www.example.com/">
</head>
Я обычно генерирую ссылку через PHP.
В случае, если кто-то хотел бы видеть это разбитым на очень надежную функцию
function getBaseURL() {
var loc = window.location;
var baseURL = loc.protocol + "//" + loc.hostname;
if (typeof loc.port !== "undefined" && loc.port !== "") baseURL += ":" + loc.port;
// strip leading /
var pathname = loc.pathname;
if (pathname.length > 0 && pathname.substr(0,1) === "/") pathname = pathname.substr(1, pathname.length - 1);
var pathParts = pathname.split("/");
if (pathParts.length > 0) {
for (var i = 0; i < pathParts.length; i++) {
if (pathParts[i] !== "") baseURL += "/" + pathParts[i];
}
}
return baseURL;
}
Легко
$('<img src=>')[0].src
Генерирует img с пустым src-name заставляет браузер вычислять base-url самостоятельно, независимо от того, есть ли у вас /index.html
или что-то еще.
Это очень старый вопрос, но вот подходы, которые я лично использую...
Как уже говорили многие, это работает для большинства ситуаций.
var url = window.location.origin;
Тем не менее, этот простой подход может быть использован для удаления любых номеров портов.
var url = "http://" + location.host.split(":")[0];
В качестве бонуса - базовый URL может быть переопределен глобально.
document.head.innerHTML = document.head.innerHTML + "<base href='" + url + "' />";
Поместите это в свой заголовок, чтобы он был доступен, когда вам это нужно.
var base_url = "<?php echo base_url();?>";
Вы получите http://localhost:81/your-path-file
или http://localhost/your-path-file
.