ページの読み込みがローカルマシン上にある場合、javascriptをチェックしたい。
私がそれをしたいのは、開発時にサーバー側(C#)の検証が両方とも正しく機能することを確認したいからです。そのため、クライアント側とサーバー側の両方のエラーが表示されるのを見るのが好きです。
したがって、テスト中に、jquery validateのものに、常に無効なデータを通過させるフラグがあります。このようにして、クライアント側とサーバーのエラーを一度に確認できます。
ただし、現在は、開発から実稼働に移行する際に手動で行ったり来たりする必要があります。
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!");
まだすべてではありませんが、少し改善されるかもしれません。ドメインの配列を作成し、 。includes を使用できるようになりました
const LOCAL_DOMAINS = ["localhost", "127.0.0.1", ...];
if (LOCAL_DOMAINS.includes(window.location.hostname))
alert("It's a local server!");
これを行う簡単な方法は、ホスト名をローカルホストと照合するか、カスタム文字列とサブストリングを照合することです。この場合、 http://testsite.local などの「.local」URL
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!");
}
次のように、c#を使用してページの背後にあるコードの1つを検出できます。
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
}
お役に立てれば。
他のスクリプトと同じメカニズムを使用した最短形式:
if ( ["localhost", "127.0.0.1", ""].includes(window.location.hostname) ) {
console.log("It's local Host !");
}
上記の答えはほとんど問題を解決しますが...
1つの解決策は、場所のハッシュを設定して確認することです。
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 localhost(:: 1)をチェックしません
_/localhost|127\.0\.0\.1|::1|\.local|^$/i.test(location.hostname)
_
一般的なlocalhost、.localドメイン、およびファイル:(空のホスト名)をチェックします。
*)Chromeでは、[].includes(...)
のパフォーマンスが最高(42ミリ秒)で、その後に配列項目チェック(119ミリ秒)を含む単純なループ(for、while)、_[].indexOf(...) > -1
(289 ms)、最後に正規表現(566 ms)。ただし、ブラウザごとに最適化方法が異なるため、これらの測定値はある程度相対的です。 FF 52 ESRでは、includes
とindexOf
の結果は似ていますが、regexpは2倍遅く、ループは6倍遅くなります。