检查用户代理是否通过正确的域访问时,哪一项最有效。
如果他们使用某种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 +中确定其他所有其他内容吗?
答案 0 :(得分:920)
作为一个小备忘录: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: '');
}
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)