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

ano*_*one 341 html javascript location host window

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

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

我们考虑使用以下内容:

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

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

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

在Firefox 5和Chrome 12中:

console.log(location.host);
console.log(location.hostname);
Run Code Online (Sandbox Code Playgroud)

..两者显示相同.

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

W3Schools说主机包含端口.

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

abe*_*ier 988

互动链接解剖学

作为一个小备忘录:交互式链接解剖

-

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

  • hostname 给你 example.org
  • host 给你 example.org:8888

  • 一张图片胜过千言万语. (64认同)
  • @lolzerywowzery ...但是只需要描述图片的那几千个单词 (3认同)
  • @Alec 这是一个有趣的技术说明;深入研究维基百科的引文表明,[根据 RFC 3986,“权威”](https://tools.ietf.org/html/rfc3986#section-3.2)_应该是主机名串联的术语_, `:` 和端口。我想知道从制定“location.host”时至今仍有多少讨论可供使用……我怀疑今天如此命名是因为在场的人没有阅读或想过提及该 RFC。 (2认同)

jfr*_*d00 69

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

我想你想要主机名来获取网站名称.


Ken*_*nas 30

如果你坚持使用window.location.origin 你可以在阅读之前把它放在你的代码之上origin

if (!window.location.origin) {
  window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}
Run Code Online (Sandbox Code Playgroud)

PS:为了记录,它实际上是原始问题.他们可能已经编辑过了.:)

  • 但是.... OP在他们的问题中从未提到过`window.location.origin`.他们的问题实际上是关于**不是**window.location.origin`的事情. (5认同)
  • 还值得注意的是 window.location.origin 存在浏览器兼容性问题。https://developer.mozilla.org/en-US/docs/Web/API/Window/location#Browser_compatibility (2认同)
  • 这不是问题,但对我有帮助:)赞成! (2认同)

blu*_*oon 10

您的主要问题已在上面得到解答.我只是想指出你正在使用的正则表达式有一个错误.它也将成功,foo-domain.com而不是它的子域domain.com

你真正想要的是这个:

/(^|\.)domain\.com$/
Run Code Online (Sandbox Code Playgroud)