2009-05-20 16 views
6

Używam ukrytego pola "Isjsenabled", aby sprawdzić, czy JavaScript klienta jest włączony lub wyłączony. Jeśli JavaScript jest włączony, funkcja JavaScript zostanie uruchomiona i ustawi wartość ukrytego pola na 1.Jak mogę uruchomić funkcję JavaScript przed załadowaniem strony?

Chcę sprawdzić ukrytą wartość po stronie serwera Page_load. Ale problem polega na tym, że JavaScript jest uruchamiany po załadowaniu strony.

Masz jakieś sugestie?

Html Część

<script type="text/javascript"> 
    $(function() { 
     $("#<%= Isjsenabled.ClientID %>").val(1); 
    }); 
</script> 

<input id="Isjsenabled" runat="server" value ="0" type="hidden" /> 

Code Behind części

protected void Page_Load(object sender, EventArgs e) {     
    HtmlInputHidden hdn = this.FindControl("Isjsenabled") as HtmlInputHidden; 
     if (hdn != null) 
      if (hdn.Value != null && hdn.Value == "0") 
       Helper.SetCookie("IJE", "0"); 
      else 
       Helper.SetCookie("IJE", "1"); 
} 
+2

Zapominasz, że WWW to model klient/serwer. Sposób, w jaki się do tego zbliżasz, jest niemożliwy. Jest to prosty przypadek kurczaka i jajka, wózek przed konia itp. Zaktualizowana wartość w ukrytym polu nie będzie dostępna, dopóki formularz nie zostanie przesłany z powrotem. – x0n

+0

ha ha .. Nie zapominam o tym, co wiem. Chcę niektóre sugestie, aby uzyskać status javascript z serverze. Myślę, że jest jakiś sposób, który w tej chwili nie mogłem myśleć. – miti737

Odpowiedz

11

Bez myślenia zbyt mocno o kierunku starasz się iść, jest mało używany tag, który jest obsługiwany przez wszystkie przeglądarki o nazwie NOSCRIPT.

<noscript> 
<img src="http://myserver/notify_no_script.aspx" style="display:none"> 
</noscript> 

Jak widać, chodzi o to, aby przeglądarka zażądała obrazu, ale tylko wtedy, gdy javascript jest wyłączony. Ta strona może ustawić zmienną sesji stwierdzającą, że bieżący klient nie ma możliwości skryptu, który byłby dostępny dla całego kodu w bieżącej sesji.

Albo można śledzić aktualną metodologię:

<noscript> 
<input type="hidden" name="noscript" value="1"> 
</noscript> 
<script><!-- 
document.writeline('<input type="hidden" name="noscript" value="0">'); 
//--></script> 

Hope this helps,

-Oisin

+0

Dziękuję za odpowiedź. html że rendrered po użyciu 2nd opcję Właściwie chcę, aby uzyskać wartość od strony serwera. Jeśli dodaję runat = "server", oba ukryte pola mogą zostać odzyskane, jeśli włączone jest js. Co sugerujesz? – miti737

+2

javascript działa na _client_ PO stronie na serwerze_serwera. Tak jak wspomniałem w komentarzu do twojego pierwotnego pytania, to, co próbujesz zrobić, nie jest możliwe. Aby odczytać * nową * wartość pola, musi nastąpić odświeżenie. Tak naprawdę nie ma połączenia między przeglądarką a stroną. – x0n

+0

Dzięki Oisin za pomoc i sugestię. Zgadzam się z Tobą. – miti737

1

Unobtrusive JavaScript mogą być interesujące. Umożliwienie stronom degradacji z wdziękiem uprości rozwój. Zaprojektuj bez JavaScriptu i zwiększaj wrażenia. To może nie być opcja, jeśli twoja aplikacja jest bardzo intensywnie JavaScript i absolutnie wymaga go do działania. W takim przypadku dobrym pomysłem byłoby użycie tagu noscript w celu poinformowania użytkowników o włączeniu obsługi JavaScript.

Zobacz także komentarze x0n. Tutaj odwołanie, aby pomóc zrozumieć HTTP request life cycle.

+0

Dzięki Daniel za Twoją sugestię. "Nierzucający się w oczy JavaScript" to elegancki sposób na zarządzanie javascript. Dziękuję za udostępnienie. Właściwie zgodnie z wymaganiami projektu muszę wykryć Javascript w przeglądarce i zapisać gdzieś do dalszego zadania po stronie serwera. To dlatego szukałem rozwiązania, które może zostać przeoczone przeze mnie. – miti737

2

javascript może sam ustawić plik cookie.

var myDate = new Date() 
document.cookie = 'IJE=1; expires=' + myDate.toGMTString() 

Czy to rozwiązuje Twój problem?

+0

Dzięki za pomoc. Zrobiłem to samo, więc nie muszę ustawiać go z kodu z tyłu. Ale jeśli ktoś włącza javascript po tym ... plik cookie istnieje. Muszę usunąć/ustawić IJE = 0 od strony serwera. – miti737

+0

Zawsze możesz ustawić IJE = 0 od strony serwera, a następnie ustawić IJE = 1 przez javascript :) –

3

powinieneś narysować swój skrypt lub nagłówek nosoks jako stronę, która następnie przekierowuje (poprzez metatag lub skrypt location.href) do następnego miejsca, które chcesz przejść w oparciu o włączenie javascript. To zajmie 2 kroki, ale przyniesie Ci to rezultat, którego szukasz. Możesz przekazać informacje, które potrzebujesz do siebie w kwerendzie przekierowania.

+0

Dzięki Dredel. Właściwie mam siatkę z przyciskiem "Przejdź". Chciałem przekierować odpowiednią stronę js/nonjs z dynamicznym querystringiem na metodę grid_ItemCommand. Dlatego musiałem znać stan przeglądarki z kodu. Teraz wydaje mi się, że muszę go przekierować w jakiś sposób z javascript, jak sugerowałeś, – miti737

+0

, pamiętając, że "przekierowanie" może być wykonane na kilka sposobów bez javascript. Możesz ustawić ukryty formularz, aby "przesłać()" do następnej lokalizacji, gdy użytkownik naciśnie przycisk "go", możesz ustawić przycisk "idź" (przekazując parametry wraz ze zmianą lokalizacji) i zrobić stary Meta przekierowanie podczas ładowania strony. Jeśli podasz więcej szczegółów na temat tego, co dokładnie robisz, mogę udzielić Ci mniej ogólnej porady :) –

Powiązane problemy