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

Fre*_*nöw 201 javascript domain-name

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

我一直在寻找这样的东西,但大多数都没有按照我想要的方式工作.

例如在使用时

document.write(document.location)
Run Code Online (Sandbox Code Playgroud)

JSFiddle上它返回

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

即实际路径或其他任何路径.

Gar*_*eth 395

怎么样:

window.location.hostname
Run Code Online (Sandbox Code Playgroud)

location对象实际上具有许多引用URL的不同部分的属性

  • 和`window.location.hostname`如果你不想得到`port`(比如`http:// localhost:3000 /`,`window.location.host ='localhost:3000'`和`window. location.hostname ='localhost' (49认同)
  • 答案是错误的,因为端口不属于域.并且`window.location.host`有时会返回端口. (5认同)
  • 这还将返回服务器名称(“ www.amazingjokes.com”,而不只是“ .amazingjokes.com”) (3认同)

Sun*_*kya 52

尝试在脚本中运行:路径:http:// localhost:4200 / landing?query = 1#2

console.log(window.location.hash)
Run Code Online (Sandbox Code Playgroud)

位置具有以下值:

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"
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案! (22认同)
  • 我喜欢带有几个例子的答案。非常非常感谢你。 (14认同)
  • @smartblonde 对于“https://www.bbc.co.uk/”,在最新的 Chrome 上运行“window.location.hostname”时,我得到“www.bbc.co.uk”。 (7认同)
  • 感谢您如此全面的回答! (3认同)
  • 由此还不清楚在具有多个点的域的情况下会发生什么。 (3认同)

cpr*_*ack 22

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

function getDomainName(hostName)
{
    return hostName.substring(hostName.lastIndexOf(".", hostName.lastIndexOf(".") - 1) + 1);
}
Run Code Online (Sandbox Code Playgroud)

  • 不正确,这将破坏几乎所有国际顶级域名. (12认同)
  • 如果你这样做google.co.uk你会得到'co.uk'回来,这是不正确的... (7认同)
  • @tbranyen你能解释一下你指的是什么吗?我能想到的唯一案例就是像"amazon.co.uk"这样的子域名.但绝对不是"几乎所有的国际顶级域名".事实上,它与100%[维基百科中的国家代码]一起使用(http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains#Country_code_top-level_domains) (4认同)

Dan*_*ein 17

window.location.hostname是一个好的开始。但它包含您可能想要删除的子域。例如,如果主机名是www.example.com,您可能只需要该example.com位。

与以往一样,有些极端情况会导致这个问题变得棘手,例如bbc.co.uk。以下正则表达式对我来说效果很好:

let hostname = window.location.hostname;
// remove any subdomains, e.g. www.example.com -> example.com
let domain = hostname.match(/^(?:.*?\.)?([a-zA-Z0-9\-_]{3,}\.(?:\w{2,8}|\w{2,4}\.\w{2,4}))$/)[1];
console.log("domain: ", domain);
Run Code Online (Sandbox Code Playgroud)


ade*_*neu 16

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;
}
Run Code Online (Sandbox Code Playgroud)

例子

  • getDomain(' http://www.example.com '); // example.com
  • getDomain( 'www.example.com'); // example.com
  • getDomain(' http: //blog.example.com',true ); // blog.example.com
  • getDomain(location.href); // ..

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

  • 如果您对“google.co.uk”执行此操作,您将得到“co.uk”,这是不正确的...... (3认同)

Ima*_*ghi 10

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

例如,此页面的URL是:

http://www.stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc
Run Code Online (Sandbox Code Playgroud)

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

location.host = "www.stackoverflow.com"
location.protocol= "http:"
Run Code Online (Sandbox Code Playgroud)

你可以用以下内容制作完整的域名:

location.protocol + "//" + location.host
Run Code Online (Sandbox Code Playgroud)

在此示例中返回 http://www.stackoverflow.com

我添加了这个,我们可以获得完整的URL以及与location对象的其他属性的路径:

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"
Run Code Online (Sandbox Code Playgroud)


dmc*_*mck 7

如果您只对域名感兴趣并想要忽略子域,那么您需要解析它hosthostname.

以下代码执行此操作:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • @XanderLamkins:它是一个iframe:http://jsfiddle.net/5U366/ < - > http://fiddle.jshell.net/5U366/show/ (2认同)

小智 7

我认为它应该像这样简单:

url.split("/")[2]


Dan*_*umb 6

使用

document.write(document.location.hostname)?
Run Code Online (Sandbox Code Playgroud)

window.location有很多属性.请参阅此处获取它们的列表.


Eth*_*han 6

由于此问题要求提供域名而不是主机名,因此应提供正确答案

window.location.hostname.split('.').slice(-2).join('.')
Run Code Online (Sandbox Code Playgroud)

这也适用于主机名,例如www.example.com

  • 这有效,但不适用于 domain.co.uk、domain.com.br 等域。我怎样才能让它与任何域一起使用? (3认同)

ujj*_*jal 6

如果你想在JavaScript中获取域名,只需使用以下代码:

var domain_name = document.location.hostname;
alert(domain_name);
Run Code Online (Sandbox Code Playgroud)

如果您需要网页 URL 路径以便可以访问 Web URL 路径,请使用以下示例:

var url = document.URL;
alert(url);
Run Code Online (Sandbox Code Playgroud)


Ric*_*nça 5

如果您希望获得完整的域名,可以使用以下命令:

document.location.origin
Run Code Online (Sandbox Code Playgroud)

如果您只想获得域名,请使用以下内容:

document.location.hostname
Run Code Online (Sandbox Code Playgroud)

但是您还有其他选择,请查看以下属性:

document.location
Run Code Online (Sandbox Code Playgroud)


小智 5

这个功能怎么样?

window.location.hostname.match(/\w*\.\w*$/gi)[0]
Run Code Online (Sandbox Code Playgroud)

这将只匹配域名,无论它是子域还是主域

  • 我喜欢这个答案。但您应该注意,如果将其用于安全相关目的......它可以被绕过。即,如果您想确保您位于 example.com,那么 hacker-example.com 也将等于“example.com”。window.location.hostname.match(/[a-zA-Z0-9-]*\.[a-zA-Z0-9-]*$/)[0] 有效。 (3认同)