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

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

我们想要显示一个小的基于js的“顶栏”风格的警告,如果他们使用某种types的web代理(因为它往往会打破js)访问域。

我们正在考虑使用以下内容:

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

这将涉及我们曾经使用的任何子域名。

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

在Firefox 5和Chrome 12中:

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

两个显示相同。

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

W3Schools说主机包含端口。

应该validationlocation.host /主机名,或者我们可以相当肯定在IE6 +和所有其他人会存在?

交互式链接解剖学

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

如果指定了一个,主机只包含端口号。 如果URL中没有专门的端口号,则返回与主机名相同的名称。 你select你是否在意与端口号相匹配。 有关更多信息,请参阅https://developer.mozilla.org/en/window.location

我会假设你想要主机名来获取网站名称。

如果你坚持使用window.location.origin你可以把它放在代码的顶部,然后再读取origin

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

你的主要问题已经在上面回答了。 我只是想指出你正在使用的正则expression式有一个错误。 它也会在foo-domain.com上成功,而不是domain.com的子domain.com

你真正想要的是这样的:

 /(^|\.)domain\.com$/ 

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

看来你会得到相同的结果两个,但hostname包含明确的主机名称没有括号或端口号。