location.host与location.hostname和跨浏览器的兼容性?

时间:2011-07-17 18:34:19

标签: javascript html window location host

检查用户代理是否通过正确的域访问时,哪一项最有效。

如果他们使用某种Web代理访问域名,我们希望显示基于小js的“顶栏”样式警告(因为它往往会破坏js)。

我们考虑使用以下内容:

var r = /.*domain\.com$/;
if (r.test(location.hostname)) {
    // showMessage ...
}

这将照顾我们曾经使用的任何子域。

我们应该使用哪个主机名或主机名?

在Firefox 5和Chrome 12中:

console.log(location.host);
console.log(location.hostname);

..两者显示相同。

是因为端口实际上不在地址栏中吗?

W3Schools表示主机包含端口。

是否应该验证location.host/hostname,或者我们可以在IE6 +中确定其他所有其他内容吗?

6 个答案:

答案 0 :(得分:920)

interactive link anatomy

作为一个小备忘录:interactive link anatomy

-

简而言之(假设位置为http://example.org:8888/foo/bar#bang):

  • hostname为您提供example.org
  • host为您提供example.org:8888

答案 1 :(得分:68)

如果指定了一个端口号,

主机只包含端口号。如果URL中没有专门的端口号,则返回与hostname相同的端口号。您选择是否要匹配端口号。有关详细信息,请参阅https://developer.mozilla.org/en/window.location

我认为你想要主机名来获取网站名称。

答案 2 :(得分:29)

如果您坚持使用window.location.origin 在阅读origin

之前,您可以将其置于代码之上
if (!window.location.origin) {
  window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}

Solution

PS:对于记录,它实际上是原始问题。它已被编辑:)

答案 3 :(得分:10)

您的主要问题已在上面得到解答。我只是想指出你正在使用的正则表达式有一个错误。它也会在foo-domain.com上成功,domain.com不是/(^|\.)domain\.com$/

的子域

你真正想要的是:

{{1}}

答案 4 :(得分:3)

MDN:https://developer.mozilla.org/en/DOM/window.location

您似乎会得到相同的结果,但hostname包含没有括号或端口号的明确主机名。

答案 5 :(得分:0)

只需添加一条注释,说明Google Chrome浏览器具有该位置的来源属性。从协议到端口号的整个域,如下面的屏幕快照所示。 chrome developers tool