Отримайте поточне доменне ім'я за допомогою Javascript (не шлях тощо)


246

Я планую придбати два доменних імені для одного сайту. Залежно від того, який домен використовується, я планую надати трохи інші дані на сторінці. Чи є спосіб я визначити власне доменне ім’я, з якого завантажується сторінка, щоб я знав, на що потрібно змінити вміст?

Я роздивлявся подібні речі, але більшість не працює так, як я хочу.

Наприклад, при використанні

document.write(document.location)

на JSFiddle воно повертається

http://fiddle.jshell.net/_display/

тобто фактичний шлях або що б там не було.


1
Я не впевнений, чи я точно розумію, що ви хочете зробити, але ви, мабуть, повинні поглянути на MDN щодо цього
MilkyWayJoe

Трохи теми, але ви також можете розглянути питання про наявність субдоменів, а не двох окремих доменних імен. Щось на кшталт premium.random.comіfree.random.com
Т.Чмелевський

Відповіді:


456

Як щодо:

window.location.hostname

locationОб'єкт на насправді має ряд атрибутів , що відносяться до різних частин URL


55
і window.location.hostnameякщо ви не хочете отримати port(наприклад http://localhost:3000/, window.location.host = 'localhost:3000'іwindow.location.hostname = 'localhost'
Guilherme

6
Відповідь неправильна, оскільки порт не належить до домену. І window.location.hostіноді віддадуть порт назад.
Андрій

4
Це також повертає ім'я сервера ("www.amazingjokes.com", а не просто ".amazingjokes.com")
Патрік

Якщо у вас є переадресація DNS, вам може знадобитися цей - window.location.ancestorOrigins
Кирило Гусятин

126

Спробуйте запустити скрипт: path: http: // localhost: 4200 / landing? Query = 1 # 2

console.log(window.location.hash)

Місцеположення має такі значення:

window.location.hash: "#2"

window.location.host: "localhost:4200"

window.location.hostname: "localhost"

window.location.href: "http://localhost:4200/landing?query=1#2"

window.location.origin: "http://localhost:4200"

window.location.pathname: "/landing"

window.location.port: "4200"

window.location.protocol: "http:"

window.location.search: "?query=1"

3
Це така чудова відповідь!
Ендрю Кемпбелл

2
Я люблю відповіді на кількох прикладах. Дуже дякую
Магно Альберто

24

Якщо вас не цікавить ім'я хоста (наприклад www.beta.example.com), а ім'я домену (наприклад example.com), це працює для дійсних імен хоста:

function getDomainName(hostName)
{
    return hostName.substring(hostName.lastIndexOf(".", hostName.lastIndexOf(".") - 1) + 1);
}

13
Неправильно, це порушиться майже на всіх міжнародних TLD.
tbranyen

4
@tbranyen, чи можете ви пояснити, про що ви звертаєтесь? Єдиний випадок, про який я можу подумати - це такі субдомени amazon.co.uk. Але точно не "майже всі міжнародні TLD". Насправді він працює зі 100% кодів країн, які містяться у Вікіпедії
cprcrack

1
cprcrack чомусь я вважав, що більше міжнародних (для Америки) tlds містять кілька крапок. Дякуємо за виправлення!
tbranyen

Ряд країн працює аналогічно Великобританії: вони мають фіксовані домени другого рівня, і ви можете реєструвати домени лише на третьому рівні. Список цих країн знаходиться у Вікіпедії .
Гарет

18
function getDomain(url, subdomain) {
    subdomain = subdomain || false;

    url = url.replace(/(https?:\/\/)?(www.)?/i, '');

    if (!subdomain) {
        url = url.split('.');

        url = url.slice(url.length - 2).join('.');
    }

    if (url.indexOf('/') !== -1) {
        return url.split('/')[0];
    }

    return url;
}

Приклади

Попередня версія отримувала повний домен (включаючи субдомен). Тепер він визначає правильний домен залежно від уподобань. Так що коли другий аргумент надається як істинний, він буде включати піддомен, інакше він повертає лише "основний домен"


1
Це має бути відповідь, це працює навіть в localhost/test.phpі те, що правильна відповідь localhost.
Мохаммед Альбанна

Це також найкраща відповідь, оскільки він працює з будь-якою URL-адресою, яку ви переходите, а не лише з поточним
вікном. Місцезнаходження

Якщо ви зробите це google.co.ukдля того, що ви отримаєте "co.uk" назад, що невірно ...
Джеймс Дуглас,

Так. Це хитра справа. Ще складніше, якщо у вас теж є субдомени (наприклад: test.google.co.uk). Якщо ви хочете скористатися цією необробленою версією, потрібні деякі серйозні коригування (можливо, навіть додавання спеціального списку для цих tlds).
adelineu

10

Ви можете легко отримати його з об’єкта локації у Javascript:

Наприклад, URL-адреса цієї сторінки:

http://www.stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc

Тоді ми можемо отримати точний домен із такими властивостями об’єкта розташування:

location.host = "www.stackoverflow.com"
location.protocol= "http:"

ви можете зробити повний домен за допомогою:

location.protocol + "//" + location.host

Що в цьому прикладі повертається http://www.stackoverflow.com

Крім цього, ми можемо отримати повну URL-адресу, а також шлях з іншими властивостями об’єкта розташування:

location.href= "http://www.stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc"    
location.pathname= "questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc"

7

Якщо вас цікавить лише доменне ім'я та ви хочете ігнорувати субдомен, вам потрібно розібрати його з hostта hostname.

Наступний код робить це:

var firstDot = window.location.hostname.indexOf('.');
var tld = ".net";
var isSubdomain = firstDot < window.location.hostname.indexOf(tld);
var domain;

if (isSubdomain) {
    domain = window.location.hostname.substring(firstDot == -1 ? 0 : firstDot + 1);
}
else {
  domain = window.location.hostname;
}

http://jsfiddle.net/5U366/4/


Чому він повертає jShell замість jsFiddle?
Freesnöw


7

Оскільки це запитання вимагає доменного імені, а не імені хоста, правильна відповідь повинна бути

window.location.hostname.split('.').slice(-2).join('.')

Це працює і для імен хостів, таких як www.example.com .


1
Це працює, але не працює з такими доменами, як domain.co.uk, domain.com.br .. Як я можу змусити його працювати з будь-яким доменом?
Самех

6

Використовуйте

document.write(document.location.hostname)​

window.locationмає купу властивостей. Дивіться тут список їх.


5

Якщо ви бажаєте повного походження домену, ви можете скористатися цим:

document.location.origin

І якщо ви хочете отримати тільки домен, скористайтеся чи можете ви саме цим:

document.location.hostname

Але у вас є інші варіанти, погляньте на властивості:

document.location

5

Що з цією функцією?

window.location.hostname.match(/\w*\.\w*$/gi)[0]

Це відповідатиме лише імені домену незалежно від того, чи є його піддомен чи основний домен


1
Мені подобається ця відповідь. Але ви повинні пам’ятати, що якщо використовувати його в цілях, пов’язаних із безпекою .. його можна обійти. Тобто, якщо ви хочете переконатися, що ви перебуваєте на example.com, тоді hacker-example.com також дорівнює "example.com". window.location.hostname.match (/ [a-zA-Z0-9 -] * \. [a-zA-Z0-9 -] * $ /) [0] працює.
hiburn8

4

Якщо ви хочете отримати доменне ім’я в JavaScript, просто використовуйте наступний код:

var domain_name = document.location.hostname;
alert(domain_name);

Якщо вам потрібен шлях до URL-адреси веб-сторінки, щоб мати доступ до шляху до веб-URL-адреси, скористайтеся цим прикладом:

var url = document.URL;
alert(url);


1

Я новачок у JavaScript, але я не можу просто використовувати: document.domain ?

Приклад:

<p id="ourdomain"></p>

<script>
var domainstring = document.domain;
document.getElementById("ourdomain").innerHTML = (domainstring);
</script>

Вихід:

domain.com

або

www.domain.com

Залежно від того, що ви використовуєте на своєму веб-сайті.


0

Я вважаю, що це повинно бути таким же простим:

url.split("/")[2]


Працює для мене. Попередні рішення покладаються на документ, місцеположення або об’єкт вікна.
Кріс

0

Поєднуючи кілька відповідей із вищезазначеного, для мене знищення файлів cookie справді добре:

  /**
   * Utility method to obtain the domain URI:
   */
  fetchDomainURI() {
    if (window.location.port.length > 0) {
      return window.location.hostname;
    }
    return `.${window.location.hostname.match(/\w*\.\w*$/gi)[0]}`;
  }

Роботи по IP - адресами з портами, наприклад, 0.0.0.0:8000 і т.д., а також складні області , як app.staging.example.comповернення .example.com=> дозволяє междоменной установку Cookie та знищення.


0

Якщо ви хочете назву домену країни - наприклад, витягнути  .com   із stackoverflow.com:

(ES6):

const getCountryDomainName = () => {
  let hostName = window.location.hostname;
  let lastDotIndex = hostName.lastIndexOf('.');
  let countryDomainName = hostName.substr(lastDotIndex+1, hostName.length);
  return countryDomainName;
}

(ES5):

function getCountryDomainName() {
  let hostName = window.location.hostname;
  let lastDotIndex = hostName.lastIndexOf('.');
  let countryDomainName = hostName.substr(lastDotIndex+1, hostName.length);
  return countryDomainName;
}

Потім просто скористайтеся функцією, щоб призначити значення var:

const countryDomainName = getCountryDomainName();

-2

@Brandito Дякую, добре, що цей сайт розміщувався у віртуальному хості AWS, я вважаю, що використовує wordpress і не знаю, чому це створює проблеми, щоб зробити це таким чином ... Не впевнений, що це неправильне перенаправлення чи щось до цього потрібно було зробити з правилами перезапису бекенд-моду. Плюс цього я хотів використати jquery ui тематичний оверліп та піктограму разом із ним. Схвалено клієнтом спочатку звичайно: '-)
Жан Поль АКА el_vete
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.