2010-07-01 54 views
48

如果裝入的頁面位於本地計算機上,我想檢查我的javascript。如果連接是本地主機,如何檢查與JavaScript?

我想這樣做的原因是,當我開發我喜歡確保我的服務器端(C#)驗證工作正常。所以我喜歡看到客戶端和服務器端出現錯誤。

所以,當我測試我有一個標誌在我的jquery驗證的東西,只是總是讓無效的數據通過。這樣我就能一眼就看到客戶端和服務器錯誤。

但是現在我必須在開發到生產之間來回切換。

回答

101

location.hostname變量爲您提供當前主機。這應該是足以讓你確定你是在哪個環境

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

是不是有一個更一般/「一攬子」解決方案,這也將涉及到使用127.0.0.1等的情況? – iX3 2012-10-10 18:21:19

+8

這只是錯誤的。許多人編輯他們的主機文件,所以'localhost'這個詞不會被發現 – vsync 2013-08-01 18:57:50

+4

我同意。這是錯誤的。通過網絡驅動器訪問「本地」文件時也不起作用。 – ProblemsOfSumit 2013-08-13 14:59:48

2

你可以發現在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 
} 

希望這會有所幫助。

+3

location.host包含主機名和端口。改爲使用location.hostname。 – pmont 2015-09-10 18:54:51

0

以上答案主要解決的問題,但...

  • 如果本地主機什麼是不一定的 'localhost /'?
  • 如果您想在開發過程中進行FE驗證,該怎麼辦?
  • 如果你開發過程中需要不同的行爲
    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; 
} 
+0

該解決方案仍然有一些手動工作,可能會被篡改。 – A1rPun 2017-01-09 10:33:45

+0

我認爲「手動工作」是微不足道的,也是篡改,因爲我們可以提交我們喜歡的任何內容,而不需要JavaScript的批准,大多數框架都有過濾器,在請求到達應用程序之前緩解攻擊。也許允許OP跳過服務器端驗證是一種風險,但它只是被添加來顯示在散列中使用密鑰的效用。 – Shanimal 2017-01-09 18:27:49

+0

我從不使用本地主機或環回,因爲將幾十個國際化客戶端(clinetA.com,clientA.de,clientB.com,clientB.au等)列入白名單很快就會變成一場噩夢。我決定提供這個解決方案,因爲它不關心域,可以在沒有補丁的情況下在現場進行檢查。 – Shanimal 2017-01-09 18:28:01

1

一個簡單的方法來做到這一點是隻檢查對本地主機的主機名或檢查您的自定義域名對一個字符串,在這種情況下「本地」的網址,比如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!"); 
} 
7

如果啓動靜態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!"); 
+0

我遇到了這個確切的問題,而我自己想出瞭解決方案,這個答案仍然應該更高。 – domsson 2017-03-14 10:48:56

1

仍然沒有抓住所有,但它可能是一個小改進。 現在,您可以創建域的數組,並使用.includes

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

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