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

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

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

例如,当使用

document.write(document.location)

JSFiddle返回

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

也就是实际的路径。

531468 次浏览

如何:

window.location.hostname

location对象实际上有一个属性数量指向URL的不同部分

使用

document.write(document.location.hostname)​

window.location有一堆属性。它们的列表请参见在这里

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

http://jsfiddle.net/5U366/4/ < a href = " http://jsfiddle.net/5U366/4/ " > < / >

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

function getDomainName(hostName)
{
return hostName.substring(hostName.lastIndexOf(".", hostName.lastIndexOf(".") - 1) + 1);
}
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;
}

例子

以前的版本是获得全域(包括子域)。现在它根据偏好来确定正确的域。所以当第二个参数被设为真时它将包含子域,否则它只返回"主域"

如果你想要一个完整的域原点,你可以使用这个:

document.location.origin

如果你只希望得到域名,使用can you just this:

document.location.hostname

但你有其他的选择,看看属性在:

document.location

由于这个问题要求域名,主机名,正确答案应该是

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

这也适用于像www.example.com这样的主机名。

你可以很容易地从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"

我觉得应该这么简单:

url.split("/")[2]

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

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

如果你需要web页面的URL路径,这样你就可以访问web URL路径使用这个例子:

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

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

这个函数呢?

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

这将只匹配域名,不管它是子域还是主域

我是JavaScript的新手,但你不能只使用:document.domain ?

例子:

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


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

输出:

domain.com

www.domain.com

这取决于你在你的网站上使用什么。

让我们假设你有这样的url路径:

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

因此,你可以通过位置值为自己服务,如下所示:

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

结合上面的一些答案,以下是我销毁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设置和销毁。

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);

即使问题是关于域名,可接受的解决方案包括子域名(如;你得到blog.example.com调用location.hostname)。 为了将来的参考,我建议使用一行程序来只提取域(例如。https://blog.example.com/index.htmlexample.com)作为Micheal。

location.hostname.split('.').filter(( _, i) => i < 2).join('.')

小心!当TLD由两部分组成时(例如;.co.uk)。如果是这样的话,在上面的代码中修改2和3。

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`

您可以使用它来删除端口号。

 var hostname = window.location.host;
var urlWithoutPort = `https://${hostname}`;
console.log(urlWithoutPort);