如果页面加载在我的本地计算机上,我想检查我的javascript。
我想这样做的原因是,当我开发时,我想确保我的服务器端(C#)验证都正常工作。所以我喜欢看到客户端和服务器端都出现错误。
因此,在我测试时,我的jquery验证内容中有一个标志,它总是让无效数据通过。这样我就可以一次看到客户端和服务器错误。
但是现在我必须在从开发到生产时手动前后移动。
答案 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)
上述答案主要解决问题,但......
一种解决方案是设置位置哈希并检查它。
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中,includes
和indexOf
的结果相似,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;
}