2011-11-11 7 views
18

Chciałbym odpalić jakiś skrypt, jeśli użytkownik odwiedza katalog główny mojej witryny.Jak sprawdzić, czy użytkownik odwiedza główny adres witryny?

Na przykład, chcę coś zrobić, moim zdaniem, gdy użytkownik odwiedza

  • www.example.com
  • example.com
  • www.example.com/
  • http://www.example.com
  • http://example.com

... [Różne kombinacje powyższych.]

I nie dla www.example.com/anything else.
Jaki jest najbezpieczniejszy sposób sprawdzenia tego na stronie widoku strony ASP.NET MVC 3 [Razor] i javascript? Czy istnieje sposób, aby dowiedzieć się, używając tylko javascript?
Dziękuję.

Odpowiedz

51

Kod JavaScript sposób najłatwiej jest:

var is_root = location.pathname == "/"; //Equals true if we're at the root 

Nawet http://example.com/?foo=bar#hash będzie produkować odpowiedniego rezultatu, ponieważ ścieżka wyklucza ciąg kwerendy i lokalizacja hash .

spojrzeć:

http://anything-but-a-slash/     Root 
          /?querystring  Root 
          /#hash    Root 
          /page    Not root 

Jeśli masz plik (i) indeks w folderze głównym, rzucić okiem na poniższy przykład:

var is_root =/^\/(?:|index\.aspx?)$/i.test(location.pathname); 

Poprzednia linia jest przy użyciu zwykłego wyrażenie. Znaki specjalne muszą być unikane, Postfiks /i powoduje, że nie ma znaczenia wielkość liter. Jeśli chcesz, aby sprawa była zgodna, pomiń flagę i.

To samo wyrażenie regularne przedstawiane graficznie:

Regular expression visualization

+0

Dzięki za dokładną odpowiedź. – Kamyar

+0

Jeśli potrzebujesz również pomocy dla localhost, spróbuj tego, gdzie/Site/reprezentuje projekt var is_root = (window.location.pathname == "/" || window.location.pathname == "/ Site /")? prawda fałsz; – afreeland

+0

@afreeland Dla 'http: // localhost/Site /', 'location.pathname' wyświetla'/Site/'. Jeśli chcesz przetestować stronę internetową, tymczasową, lepiej użyj ".htaccess", aby przepisać root. Zobacz: http://pastebin.com/4ZJzKJkE. Również 'a == b' zwraca już wartość boolowską, nie ma potrzeby używania' (a == b? True: false) '. –

0

Z wyrażenia regularnego jak:

(/^https?\:\/\/[^\/]+\/?$/).test(window.location.href)

+3

wydaje się o wiele łatwiejsze w użyciu 'window.location.pathname'. – jfriend00

+0

To jest cholernie prawdziwe :) – Mic

+0

@Mic trochę zdezorientowany z regex można prosić o krótko? – Praveen

0

myślę

if(window.location == window.location.hostname) { 
    //is root 
} 

Edit: Nie używaj tego, patrz komentarz

+1

Dzięki. ale 'window.location.hostname' nie respektuje numerów portów. W przypadku deweloperów, jeśli masz numer portu inny niż 80, otrzymasz fałszywe wyniki. – Kamyar

+1

@Kamyar: Masz rację, dziękuję – Andre

1

Spróbuj bardziej zdecydowane wyrażenie regularne :

Regex

var isRoot =/^(\/|\/index\.asp|\/index\.aspx)$/i.test(location.pathname); 


Opis

Regular expression visualization


Demo

Debuggex Demo

0

Testowanie nazwy ścieżki "/" nie powiodło się, gdy uruchomiłem moją aplikację w trybie debugowania/podglądu z mojego IDE online. Innymi słowy, jest zwykle obsługiwany z czystym adresem URL (nie .html), z wyjątkiem sytuacji, gdy serwuję go z Cloud9, w którym to przypadku jest obsługiwany z index.html.

Tak, to jest praca dla mnie:

if(window.location.pathname.length == 1 || window.location.pathname.length == 0 || window.location.pathname === "/index.html" || window.location.pathname === "/index"){ //I'm at the app root }

Powiązane problemy