Как извлечь часть имени хоста из URL-адреса в JavaScript

StackOverflow https://stackoverflow.com/questions/1368264

  •  21-09-2019
  •  | 
  •  

Вопрос

Есть ли действительно простой способ начать с полного URL-адреса:

document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"

И извлеките только хостовую часть:

aaa.bbb.ccc.com

Должна быть функция JavaScript, которая делает это надежно, но я не могу ее найти.

Это было полезно?

Решение

предположим, что у вас есть страница с этим адресом: http://sub.domain.com/virtualPath/page.htm.используйте следующее в коде страницы для достижения этих результатов:

  • window.location.host :ты получишь sub.domain.com:8080 или sub.domain.com:80
  • window.location.hostname :ты получишь sub.domain.com
  • window.location.protocol :ты получишь http:
  • window.location.port :ты получишь 8080 или 80
  • window.location.pathname :ты получишь /virtualPath
  • window.location.origin :ты получишь http://sub.domain.com *****

Обновлять:о происхождении .origin

***** Как ссылка штаты, совместимость браузера для window.location.origin непонятно.Я проверил это в Chrome, и он вернулся http://sub.domain.com:port если порт не 80, и http://sub.domain.com если порт 80.

Особая благодарность @torazaburo за то, что рассказал мне об этом.

Другие советы

Вы можете объединить протокол местоположения и хост:

var root = location.protocol + '//' + location.host;

Для URL, скажем 'http://stackoverflow.com/questions', оно вернется 'http://stackoverflow.com'

Использовать document.location объект и его host или hostname характеристики.

alert(document.location.hostname); // alerts "stackoverflow.com"

Есть два пути.Первый — это вариант другого ответа здесь, но он учитывает порты, отличные от портов по умолчанию:

function getRootUrl() {
  var defaultPorts = {"http:":80,"https:":443};

  return window.location.protocol + "//" + window.location.hostname
   + (((window.location.port)
    && (window.location.port != defaultPorts[window.location.protocol]))
    ? (":"+window.location.port) : "");
}

Но я предпочитаю этот более простой метод (который работает с любой строкой URI):

function getRootUrl(url) {
  return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}

Принятый ответ мне не помог, так как хотелось иметь возможность работать с любыми произвольными URL-адресами, а не только с URL-адресом текущей страницы.

Взгляните на URL объект:

var url = new URL("http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah");
url.protocol;  // "http:"
url.hostname;  // "aaa.bbb.ccc.com"
url.pathname;  // "/asdf/asdf/sadf.aspx"
url.search;    // "?blah"

использовать

окно.location.origin

и для:"http://aaa.bbb.ccc.ddd.com/sadf.aspx?blah"

ты получишь: http://aaa.bbb.ccc.ddd.com/

Пытаться

document.location.host

или

document.location.hostname

Есть еще один хак, который я использую и никогда не видел ни в одном ответе StackOverflow:использование атрибута изображения «src» даст полный базовый путь вашего сайта.Например :

var dummy = new Image;
dummy.src = '$';                  // using '' will fail on some browsers
var root = dummy.src.slice(0,-1); // remove trailing '$'

По URL-адресу, например http://domain.com/somesite/index.html, root будет установлено на http://domain.com/somesite/.Это также работает для локального хоста или любого действующего базового URL-адреса.

Обратите внимание, что это приведет к сбою HTTP-запроса на $ фиктивный образ.Чтобы избежать этого, вы можете использовать существующее изображение, внеся лишь небольшие изменения в код.

Другой вариант использует фиктивную ссылку без каких-либо побочных эффектов на HTTP-запросы:

var dummy = document.createElement ('a');
dummy.href = '';
var root = dummy.href;

Однако я не тестировал его в каждом браузере.

Проверь это:

alert(window.location.hostname);

это вернет имя хоста как www.domain.com

и:

window.location.host

вернет доменное имя с портом типа www.example.com:80

Для полной проверки ссылок разработчик Мозиллы сайт.

Я хотел бы кое-что уточнить.Если кто-то хочет получить весь URL-адрес с таким путем, как мне нужно, можно использовать:

var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;

Я знаю, что уже немного поздно, но я создал небольшую чистую функцию с небольшим синтаксисом ES6.

function getHost(href){
  return Object.assign(document.createElement('a'), { href }).host;
}

Это также можно написать на ES5, например

function getHost(href){
  return Object.assign(document.createElement('a'), { href: href }).host;
}

Конечно, IE не поддерживает Object.assign, но в моей работе это не имеет значения.

Regex обеспечивает гораздо большую гибкость.

    //document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah
    //1.
     var r = new RegExp(/http:\/\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com

    //2. 
     var r = new RegExp(/http:\/\/[^/]+\/[^/]+/);
     var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com/asdf
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top