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

时间:2010-07-01 23:50:43

标签: javascript jquery localhost

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

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

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

但是现在我必须在从开发到生产时手动前后移动。

12 个答案:

答案 0 :(得分:157)

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

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

答案 1 :(得分:16)

如果在浏览器中启动静态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!");

答案 2 :(得分:3)

仍然没有抓住所有但是它可能会有所改善。 您现在可以创建一个域数组并使用.includes

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

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

答案 3 :(得分:3)

本章还介绍了一些常见的情况,其中本地网络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'))
  )
}

答案 4 :(得分:2)

执行此操作的简单方法是仅针对localhost检查主机名,或者针对子字符串检查自定义域名,在本例中为" .local"网址,例如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!");
}

答案 5 :(得分:1)

您可以使用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
}

希望这有帮助。

答案 6 :(得分:1)

使用与其他脚本相同的机制的最短表单:

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

答案 7 :(得分:0)

上述答案主要解决问题,但......

  • 如果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;
}

答案 8 :(得分:0)

正则表达式较慢*,但简短明了。另外,这里没有人检查IPv6本地主机(:: 1)

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

它检查常规的localhost,.local域和文件:(空主机名)。

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

答案 9 :(得分:0)

这就是在反应,注册服务工作者中进行检查的方式,这是通过检查主机名(包括 localhost IPv6 < / strong>,并且匹配以 127 开头:

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}$/
    )
);

答案 10 :(得分:0)

基于以上评论,以下正则表达式已帮助我进行验证 如果网址为“ 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)

答案 11 :(得分:0)

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;
}