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
包含明确的主机名称没有括号或端口号。