如果页面加载位于我的本地计算机上,我想检查一下我的JavaScript。
我要这样做的原因是,在开发时,我想确保我的两个服务器端(C#)验证均正常工作。因此,我希望同时看到客户端和服务器端的错误。
因此,当我测试时,我的jquery验证标志中有一个标志始终只是使无效数据通过。这样一来,我一眼就能看到客户端和服务器错误。
但是现在,我必须手动进行从开发到生产的来回更改。
如果页面加载位于我的本地计算机上,我想检查一下我的JavaScript。
我要这样做的原因是,在开发时,我想确保我的两个服务器端(C#)验证均正常工作。因此,我希望同时看到客户端和服务器端的错误。
因此,当我测试时,我的jquery验证标志中有一个标志始终只是使无效数据通过。这样一来,我一眼就能看到客户端和服务器错误。
但是现在,我必须手动进行从开发到生产的来回更改。
Answers:
该location.hostname
变量为您提供当前主机。这足以确定您所处的环境。
if (location.hostname === "localhost" || location.hostname === "127.0.0.1")
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!");
这就是在React中进行检查,注册服务人员的方式,这是通过检查主机名(包括localhost和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}$/
)
);
一种简单的方法是仅针对localhost检查主机名,或针对子字符串检查您的自定义域名,在这种情况下为“ .local” URL,例如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!");
}
本章还介绍了一些常见的情况,其中本地网络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'))
)
}
您可以使用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
}
希望这可以帮助。
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;
}
上面的答案大部分可以解决问题,但是...
一种解决方案是设置位置哈希并检查它。
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;
}
正则表达式较慢*,但简短明了。另外,这里没有人检查IPv6本地主机(:: 1)
/localhost|127\.0\.0\.1|::1|\.local|^$/i.test(location.hostname)
它检查常规localhost,.local域和文件:(空主机名)。
*)在Chrome中,的性能[].includes(...)
最佳(42 ms),其次是简单循环(for,while),先进行数组项检查(119 ms),然后是[].indexOf(...) > -1
(289 ms),最后是正则表达式(566 ms)。但是这些度量值是相对的,因为不同的浏览器的优化方式不同。在FF 52 ESR中includes
,indexOf
具有相似的结果,正则表达式慢2倍,循环慢6倍。