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

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

我们正在考虑使用以下方法:

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

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

我们应该用host还是hostname?

在Firefox 5和Chrome 12中:

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

. .两者都是一样的。

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

W3Schools说主机包含端口。

应的位置。host/hostname是否被验证,或者我们能否相当确定在IE6+和所有其他系统中它将存在?


如果指定了端口号,Host只包括端口号。如果URL中没有明确的端口号,那么它将返回与主机名相同的端口号。您可以选择是否匹配端口号。有关窗口的更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/Location。位置对象及其用于匹配的各种选择(带或不带端口)。

我假设你需要hostname来获取站点名。

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

看起来两者的结果是一样的,但是hostname包含清晰的主机名,没有括号或端口号。

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

--

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

主机名给你example.org 主持人给你example.org:8888

上面已经回答了你的主要问题。我只是想指出你正在使用的正则表达式有一个bug。它也将成功在foo-domain.com,这不是domain.com的子域名

你真正想要的是:

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

如果你坚持使用window.location.origin 您可以在阅读原始代码之前将其放在代码的顶部

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

解决方案

PS:在记录中,这实际上是最初的问题。它已经被编辑过了:)

只是添加一个注意,谷歌Chrome浏览器有原点属性的位置。它为您提供了从协议到端口号的整个域,如下面的截图所示。