我计划为同一个网站购买两个域名。根据所使用的域,我计划在页面上提供稍微不同的数据。是否有一种方法可以让我检测页面正在加载的实际域名,以便我知道要将我的内容更改为什么?

我到处找过这样的东西,但大多数都不是我想要的方式。

例如,当使用

document.write(document.location)

在JSFiddle上返回

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

也就是实际的路径。


当前回答

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

像以往一样,有一些极端的情况会让这个问题变得棘手,例如bbc.co.uk。下面的正则表达式很适合我:

让hostname = window.location.hostname; //删除任何子域名,例如www.example.com -> example.com 让域= hostname.match (/^(?:.*?\.)?([ a-zA-Z0-9{3} \ \ _)。(?:\ w {2, 8} | \ w {2,4} \ \ w{2,4})) /美元)[1]; Console.log ("domain: ", domain);

其他回答

如果您只对域名感兴趣,想要忽略子域,那么您需要解析出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/

你可以很容易地从Javascript中的location object中获得它:

例如,这个页面的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对象的其他属性:

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"

https://publicsuffix.org/list/

(https://github.com/publicsuffix/list/blob/master/public_suffix_list.dat)

需要正确地解析出所有没有后缀的域,在上面的答案中使用点永远不会完全正确。可以对公共后缀dat文件运行上面的代码样例来实现这一点。

您可以基于此编写自己的代码,或者使用https://www.npmjs.com/package/tldts这样的包

getDomainWithoutSuffix('google.com');        // returns `google`
getDomainWithoutSuffix('fr.google.com');     // returns `google`
getDomainWithoutSuffix('fr.google.google');  // returns `google`
getDomainWithoutSuffix('foo.google.co.uk');  // returns `google`
getDomainWithoutSuffix('t.co');              // returns `t`
getDomainWithoutSuffix('fr.t.co');           // returns `t`
getDomainWithoutSuffix('https://user:password@example.co.uk:8080/some/path?and&query#hash'); // returns `example`

对于我的情况,最好的匹配是window.location.origin

我觉得应该这么简单:

url.split("/")[2]