使用 Javascript 获取当前域名(不是路径等)

IT技术 javascript domain-name
2021-03-21 11:00:33

我打算为同一个站点购买两个域名。根据使用的域,我计划在页面上提供略有不同的数据。有没有办法让我检测加载页面的实际域名,以便我知道将我的内容更改为什么?

我已经环顾四周寻找这样的东西,但大部分都没有按照我想要的方式工作。

例如当使用

document.write(document.location)

JSFiddle 上它返回

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

即实际路径或其他任何内容。

6个回答

怎么样:

window.location.hostname

location对象实际上有许多指向 URL 不同部分的属性

window.location.hostname如果你不想要得到的port(如http://localhost:3000/window.location.host = 'localhost:3000'window.location.hostname = 'localhost'
2021-04-29 11:00:33
如果您有转发 DNS,您可能需要这个 - window.location.ancestorOrigins
2021-04-30 11:00:33
答案是错误的,因为端口不属于域。并且window.location.host有时会返回端口。
2021-05-06 11:00:33
这也会返回服务器名称(“www.amazingjokes.com”,而不仅仅是“.amazingjokes.com”)
2021-05-21 11:00:33

假设你有这个 url 路径:

http://localhost:4200/landing?query=1#2

因此,您可以通过location values为自己服务,如下所示:

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"

现在我们可以得出您正在寻找的结论:

window.location.hostname
@smartblonde 因为https://www.bbc.co.uk/在最新的 Chrome 上www.bbc.co.uk运行时得到了window.location.hostname
2021-04-22 11:00:33
我喜欢有几个例子的答案。非常非常感谢你。
2021-05-06 11:00:33
这是一个非常棒的答案!
2021-05-08 11:00:33
从中不清楚在具有多个点的域的情况下会发生什么。
2021-05-09 11:00:33
谢谢你这么全面的回答!
2021-05-17 11:00:33

如果您对主机名(例如www.beta.example.com不感兴趣,但对域名(例如example.com感兴趣,这适用于有效的主机名:

function getDomainName(hostName)
{
    return hostName.substring(hostName.lastIndexOf(".", hostName.lastIndexOf(".") - 1) + 1);
}
@tbranyen 你能解释一下你指的是什么吗?我能想到的唯一情况是像amazon.co.uk. 但绝对不是“几乎所有国际顶级域名”。事实上,它适用于 100%在维基百科中找到国家代码
2021-04-29 11:00:33
cprcrack 出于某种原因,我认为更多的国际(到美国)tlds 包含多个点。谢谢指正!
2021-05-01 11:00:33
不正确,这将破坏几乎所有国际 TLD。
2021-05-07 11:00:33
许多国家的运作方式与英国类似:它们有固定的二级域名,您只能注册三级域名。这些国家的名单在维基百科上
2021-05-19 11:00:33
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;
}

例子

以前的版本正在获取完整域(包括子域)。现在它根据偏好确定正确的域。因此,当第二个参数被提供为 true 时,它​​将包含子域,否则它只返回“主域”

是的。这是一件棘手的事情。如果您也有子域(例如:test.google.co.uk),那就更棘手了。如果您想使用此原始版本,则需要进行一些重大调整(甚至可能为这些 tld 添加一个特殊列表)。
2021-04-22 11:00:33
这也是最好的答案,因为它适用于您传入的任何 URL,而不仅仅是当前的 window.location
2021-05-06 11:00:33
如果你这样做google.co.uk,你会得到“co.uk”回来,这是不正确的......
2021-05-06 11:00:33
这应该是答案,它甚至适用于localhost/test.php正确答案localhost
2021-05-08 11:00:33

您可以轻松地从 Javascript 中的位置对象获取它:

例如这个页面的 URL 是:

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

然后我们可以使用 location 对象的以下属性获得确切的域:

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"