Как получить базовый URL-адрес с помощью jquery или javascript?

163

В joomla php я могу использовать его $this->baseurlдля получения базового пути, но я хотел получить базовый путь в jquery.

Базовый путь может быть любым из следующих примеров:

http://www.example.com/
http://localhost/example
http://www.example.com/sub/example

Также exampleможет измениться.

Навин Раунияр
источник
возможный дубликат Как получить базовый путь в jQuery?
Mritunjay 08
@Mritunjay Я уже видел это, но в моем случае базовый путь отличается, так как я хотел получить базовый путь, как в php, который мы делаем в joomla
Навин Раунияр
Итак, ни один из ответов не решил вашу проблему?
Artjom B.
выберите ответ, пожалуйста?
aljabear

Ответы:

185

Это поможет вам ...

var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
Жениш
источник
Да, это работает! http://localhost/myapp/what/ever/sub/folder-> getBaseUrl -> http://localhost/myapp:-)
vee
3
Это не будет работать во всех случаях, на что указывает как-то недооцененный ответ @Artjom B. Например, когда сайт тестируется в локальной сети (и домен заменяется на IP + локальный путь), базовый URL-адрес может быть чем-то вроде 192.168.0.23/~sites/site/html/вместо site.dev. Получение полного пути с помощью Javascript тоже не вариант, потому что сайт может иметь любое количество виртуальных подкаталогов.
конечно
лучший ответ ... отлично работает для меня в ionic и react.js
Бетини О. Хелено
144

Я думаю, тебе подойдет

var base_url = window.location.origin;

var host = window.location.host;

var pathArray = window.location.pathname.split( '/' );
Харис
источник
7
Хорошо, коротко и мило, спасибо. window.location.origin
TetraDev
1
это должен быть предпочтительный ответ, поскольку он короткий, лаконичный и работает нормально.
Грегор
window.location.origin не определен в ie9
jnoreiga
2
@jnoreiga Кто все еще использует ie9 ツ
Александр Добрикур,
2
Я бы хотел, чтобы все было так просто @AlexandreDaubricourt
jnoreiga
32

Это получит базовый URL

var baseurl = window.location.origin+window.location.pathname;
Захир Бабар
источник
это то же самое, что и window.location.href
Бернардо Даль Корно
8
это не то же самое, pathname дает вам сегмент пути URL-
адреса
24

Это очень старый вопрос, но вот подходы, которые я лично использую ...

Получить стандартный / базовый URL

Как уже было сказано многими, это работает в большинстве ситуаций.

var url = window.location.origin;


Получить абсолютный базовый URL

Однако этот простой подход можно использовать для удаления любых номеров портов.

var url = "http://" + location.host.split(":")[0];

Изменить: чтобы решить проблему, высказанную Джейсоном Райсом , для автоматической вставки правильного типа протокола можно использовать следующее ...

var url = window.location.protocol + "//" + location.host.split(":")[0];


Установить базовый URL

В качестве бонуса - базовый URL-адрес может быть переопределен глобально.

document.head.innerHTML = document.head.innerHTML + "<base href='" + url + "' />";
Дастин Холстед
источник
1
Если ваш протокол не является чем-то другим, кроме http, например https (тогда установка протокола URL-адреса на «http: //» представит некоторые действительно странные ошибки в зависимости от того, как вы хотите использовать URL-адрес).
Джейсон Райс
16

document.baseURIвозвращает базовый URL-адрес, также учитывая значение в <base/>теге https://developer.mozilla.org/en-US/docs/Web/API/Node/baseURI

Даниил Самойлов
источник
Это также возвращает хэшбанг, который, скорее всего, не то, что хотел OP
Марсель
13

Это невозможно из javascript, потому что это свойство на стороне сервера. Javascript на клиенте не может знать, где установлена ​​joomla. Лучший вариант - как-то включить значение $this->baseurlв javascript страницы, а затем использовать это значение ( phpBaseUrl).

Затем вы можете создать URL-адрес следующим образом:

var loc = window.location;
var baseUrl = loc.protocol + "//" + loc.hostname + (loc.port? ":"+loc.port : "") + "/" + phpBaseUrl;
Артём Б.
источник
1
Обратите внимание , что loc.hostимеет порт для URL , как http://localhost:8082/этот метод будет производить http://localhost:8082:8082/, window.location.hostnameследует использовать вместо этого.
Тибериу С.
@TiberiuC. Спасибо, добавил.
Artjom B.
9

Некоторое время назад была такая же проблема, моя проблема заключалась в том, что мне просто нужен базовый URL. Здесь есть много подробных опций, но чтобы обойти это, просто используйте window.locationобъект. На самом деле введите это в консоли браузера и нажмите Enter, чтобы выбрать там свои параметры. В моем случае это было просто:

window.location.origin
Джон
источник
8
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 /

АХИЛ КУМАР
источник
6

самый простой способ получить базовый URL-адрес в jQuery

window.location.origin
Кайсар Малик
источник
На самом деле это не jQuery. jQuery выглядит так: $ (location) .attr ("origin");
Мауриц Хансен,
5

Я столкнулся с этой потребностью в нескольких проектах Joomla. Самый простой способ, который я нашел, - это добавить в мой шаблон скрытое поле ввода:

<input type="hidden" id="baseurl" name="baseurl" value="<?php echo $this->baseurl; ?>" />

Когда мне нужно значение в JavaScript:

var baseurl = document.getElementById('baseurl').value;

Не так сложно, как использование чистого JavaScript, но просто и выполняет свою работу.

Брайан Болли
источник
4

Вы можете легко получить это с помощью:

var currentUrl = window.location.href;

или, если вам нужен исходный URL, используйте:

var originalUrl = window.location.origin;
Мохаммад Джахидул Алам
источник
3

Я бы порекомендовал всем создать базовый тег 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/не вызывает http://localhost:8080/some/path/.

Сделайте вид, что вы ссылаетесь на все гиперссылки как на полные предложения без базового URL.

Cagcak
источник
3

Формат: имя хоста / путь / поиск

Итак, 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

Md. Хирул Ислам Оми
источник
3

Я удивлен, что ни один из ответов не учитывает базовый URL-адрес, если он был установлен в <base>теге. Все текущие ответы пытаются получить имя хоста или имя сервера или первую часть адреса. Это полная логика, которая также учитывает <base>тег (который может относиться к другому домену или протоколу):

function getBaseURL(){
  var elem=document.getElementsByTagName("base")[0];
  if (typeof(elem) != 'undefined' && elem != null){
     return elem.href;
  }
  return window.location.origin;
}

Формат JQuery:

function getBaseURL(){
  if ($("base").length){
     return $("base").attr("href");
  }
  return window.location.origin;
}

Не вдаваясь в приведенную выше логику, сокращенное решение, которое учитывает как <base>тег, так и window.location.origin:

Js:

var a=document.createElement("a");
a.href=".";
var baseURL= a.href;

JQuery:

var baseURL= $('<a href=".">')[0].href

Последнее замечание: для локального файла на вашем компьютере (не на хосте) window.location.originвозвращается file://только метод сортировки, но приведенное выше решение sorthand возвращает полный правильный путь.

Али Шейхпур
источник
1
Это не лучший способ. Также см. Ответ @ DaniilSamoylov, который включает <base>элемент.
Брэд
baseURI возвращает базовый URL-адрес узла, поэтому в этом случае он возвращает базовый путь + имя документа. вам потребуются дополнительные коды, чтобы удалить имя документа из этого URL. @Brad
Али Шейхпур
Это решение никак не вернуть правильный базовый URL , когда в корневом каталоге веб - страницы находится в подкаталоге (например , example.com/appRoot ). Он работает только в том случае, если корневой каталог веб-страницы находится непосредственно в корне веб-хоста.
Джон Рейнджер
2
window.location.origin+"/"+window.location.pathname.split('/')[1]+"/"+page+"/"+page+"_list.jsp"

почти такой же, как ответ Жениша, но немного короче.

Матин
источник
2

Я был на той же сцене, и это решение работает для меня

В представлении

<?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

Не помню, откуда беру эту информацию, чтобы отдать должное, если найду, то отредактирую ответ

Марио
источник
1

Легко

$('<img src=>')[0].src

Создает img с пустым src-name, заставляет браузер вычислять базовый URL-адрес самостоятельно, независимо от того, есть ли у вас /index.htmlили что-то еще.

Мрачный
источник
Это кажется самым элегантным решением из всех и единственным, которое не дублирует логику браузера, что приятно. Интересно, насколько это портативно. Есть ли в спецификациях HTML что-нибудь, что могло бы предположить, что это гарантированно работает во всех браузерах?
Matthijs Kooijman
@MatthijsKooijman Зависит от интерпретации спецификаций html. Если вы говорите, что имя файла длиной 0 является допустимым именем ресурса ... оно соответствует всем браузерам.
Grim
Узнайте, как устроены браузеры. У вас есть пара программистов, которые (косвенно) хотят создать браузер. Их первый источник - это html-спецификации. Они читают спецификации, и это один из вопросов, которые им действительно нравится решать. Как вы думаете, как они (все) решатся на эти обстоятельства?
Grim
1
Это должен быть выбранный ответ.
Norcal Johnny
1
var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
викас Чатурведи
источник
1
Пожалуйста, подумайте о добавлении описания к вашему ответу.
Козерог
1

Вот что-то быстрое, что также работает с file://URL-адресами.

Я придумал этот однострочник:

[((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+"://")]
Blubbll
источник
0

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

<head>
  <base href="http://www.example.com/">
</head>

Обычно я создаю ссылку через PHP.

Hexodus
источник
0

На случай, если кто-то захочет увидеть, как это разбито на очень надежную функцию

    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;
    }
Nuander
источник
Это просто дает весь URL-адрес. Не базовый URL.
Сэм
действительно, не уверен, к чему я клоню. Я давно переключился на установку этого кода на стороне сервера
nuander
-2

Разделите и присоединитесь к URL:

const s = 'http://free-proxy.cz/en/abc'
console.log(s.split('/').slice(0,3).join('/'))
даровать солнце
источник
-4

Поместите это в свой заголовок, чтобы он был доступен, когда вам это нужно.

var base_url = "<?php echo base_url();?>";

Вы получите http://localhost:81/your-path-fileили http://localhost/your-path-file.

Асрофил Аль Банна
источник