如果连接是本地主机,如何检查javascript?

cho*_*bo2 78 javascript jquery localhost

如果页面加载在我的本地计算机上,我想检查我的javascript.

我想这样做的原因是,当我开发时,我喜欢确保我的服务器端(C#)验证都正常工作.所以我喜欢看到客户端和服务器端都出现错误.

所以当我测试时,我的jquery验证内容中有一个标志,它总是让无效数据通过.这样我就可以一次看到客户端和服务器错误.

但是现在我必须手动去从开发到生产时来回切换.

Uni*_*ron 173

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

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

  • 是不是还有更普遍/"全能"的解决方案,也包括使用127.0.0.1等的情况? (12认同)
  • 这是错的.许多人编辑他们的主机文件,因此找不到"localhost"这个词 (8认同)
  • 我同意.这是错的.通过网络驱动器访问"本地"文件时也不起作用. (4认同)
  • 呃不知道为什么每个人都说这是错误的。这个简单的剪辑非常适合我在本地主机和生产环境中使用。我的软件通过 1 行简单的代码就知道投放广告的天气——与否。谢谢欧普。 (2认同)

小智 22

如果在浏览器中启动静态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!");
Run Code Online (Sandbox Code Playgroud)


dan*_*lla 9

仍然不是全部,但可能会有所改进。您现在可以创建域数组并使用.includes

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

if (LOCAL_DOMAINS.includes(window.location.hostname))
  alert("It's a local server!");
Run Code Online (Sandbox Code Playgroud)


Ali*_*eza 8

这就是在React 中检查它的方式,注册 service worker,通过检查主机名(包括localhostIPv6)以及匹配开始以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}$/
    )
);
Run Code Online (Sandbox Code Playgroud)

  • @OlivierCailloux,可能是将 `.match()` 的结果限制为布尔值,没有一个 `!!` 也不会做得很好。 (3认同)

Tar*_*aro 6

使用与其他脚本相同的机制的最短形式:

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


Hol*_*ick 6

这也涵盖了一些常见的情况,其中本地网络 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'))
  )
}
Run Code Online (Sandbox Code Playgroud)

  • `.local` 是为“小型网络”设计的 mDNS 保留的。在大多数情况下,这是在本地网络上。请参阅 https://en.wikipedia.org/wiki/Multicast_DNS 但你是对的,问题是“连接是本地主机”,这仅适用于条件的第一行。我会更新我的答案。谢谢! (2认同)