如何用 javascript 检查连接是否为本地主机?

我想有一个检查在我的 javascript 如果页面加载是在我的本地机器。

我之所以这样做,是因为在开发时,我希望确保我的服务器端(C #)验证工作正常。因此,我希望看到客户端和服务器端的错误都显示出来。

因此,当我在测试时,我在 jquery 验证工具中有一个标志,它总是允许无效数据通过。这样我就可以一次性看到客户端和服务器错误。

然而,现在我不得不在从开发到生产的过程中手动来回变更。

88057 次浏览

location.hostname变量为您提供当前主机。这应该足以让你确定你所处的环境。

if (location.hostname === "localhost" || location.hostname === "127.0.0.1")
alert("It's a local server!");

您可以使用 c # 在页面后面的代码中进行检测,如下所示:

if ((Request.Url.Host.ToLower() == "localhost"))
{
// ..., maybe set an asp:Literal value that's in the js
}

或者,如果您想从客户端脚本执行此操作,可以检查 window.location.host 的值。

if (window.location.host == "localhost")
{
// Do whatever
}

希望这个能帮上忙。

以上的答案大部分解决了问题,但是..。

  • 如果 localhost 不一定是“ localhost/”怎么办?
  • 如果您希望在开发过程中进行 FE 验证,该怎么办?
  • 如果您希望在开发过程中有不同的行为怎么办
    (安全验证,是验证,没有验证)

一种解决方案是设置位置散列并检查它。

Http://myname.foo.com/form.html#devvalidation

您可以添加一个开关无限的选项

switch(location.hash) {}
case '#devValidation':
// log the results and post the form
break;
case '#beValidation':
// skip front end validation entirely
break;
case '#noValidation':
// skip all validation $('[name=validationType']).val('novalidation');
break;
case '#feValidation':
default:
// do fe validation
break;
}

一个简单的方法是根据 localhost 检查主机名,或者根据子字符串检查自定义域名。局部”网址,例如 http://testsite.local

var myUrlPattern = '.local';
if (window.location.hostname === "localhost" || location.hostname === "127.0.0.1" || window.location.hostname.indexOf(myUrlPattern) >= 0) {
alert("It's a local server!");
}

如果在浏览器中启动静态 html,例如从像 file:///C:/Documents and Settings/Administrator/Desktop/这样的位置检测“ localhost”将不起作用。location.hostname将返回空字符串。所以

if (location.hostname === "localhost" || location.hostname === "127.0.0.1" || location.hostname === "")
alert("It's a local server!");

虽然还不能完全说明问题,但可能会有一点进步。 您现在可以创建一个域数组,并使用 < a href = “ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global _ Objects/Array/include”rel = “ noReferrer”>

const LOCAL_DOMAINS = ["localhost", "127.0.0.1", ...];


if (LOCAL_DOMAINS.includes(window.location.hostname))
alert("It's a local server!");

使用与其他脚本相同的机械装置的最短表格:

if ( ["localhost", "127.0.0.1", ""].includes(window.location.hostname) ) {
console.log("It's local host !");
}

正则表达式比较慢 * ,但是短而整洁。此外,这里没有人检查 IPv6本地主机(: : 1)

/localhost|127\.0\.0\.1|::1|\.local|^$/i.test(location.hostname)

它检查一般的 localhost、 . local 域和 file: (空主机名)。

*)在 Chrome 中,[].includes(...)的性能最好(42毫秒) ,其次是简单循环(for,while)和数组项检查(119毫秒) ,然后是 [].indexOf(...) > -1(289毫秒) ,最后是 regexp (566毫秒)。 但是这些测量在某种程度上是相对的,因为不同的浏览器有不同的优化方式。在 FF 52 ESR includesindexOf中,regexp 慢2倍,环6倍。

这就是在 反应,注册服务人员中如何检查它的方法,通过检查主机名(包括 本地主机IPv6)以及从 127开始匹配来检查您是否在 localhost 上的好方法:

const isLocalhost = Boolean(
window.location.hostname === 'localhost' ||
// [::1] is the IPv6 localhost address.
window.location.hostname === '[::1]' ||
// 127.0.0.1/8 is considered localhost for IPv4.
window.location.hostname.match(
/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
)
);

基于上面的注释,下面的正则表达式帮助我验证 如果 URL 是“ localhost”,则任何 IP 地址为 IPv4或 IPv6。

window.location.hostname.match(/localhost|[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}\.[0-9]{2,3}|::1|\.local|^$/gi)
const LOCAL_DOMAINS = [ "localhost", "127.0.0.1" ];


/* offline || development */
if ( LOCAL_DOMAINS.includes(location.hostname) )
{
BASE_URL_PUBLIC = location.hostname + "/folder/website/"; // your project folder
}


/* online || production */
else
{
BASE_URL_PUBLIC = location.hostname;
}

本文还介绍了一些常见的情况,即本地网络 IP 以 10.0.192.168.开始,或者像 Bonjour 这样的域以 .local结束:

export function isLocalNetwork(hostname = window.location.hostname) {
return (
(['localhost', '127.0.0.1', '', '::1'].includes(hostname))
|| (hostname.startsWith('192.168.'))
|| (hostname.startsWith('10.0.'))
|| (hostname.endsWith('.local'))
)
}