2009-05-20 114 views
6

我正在使用隱藏字段'Isjsenabled'來檢測客戶端的Javascript是啓用還是禁用。如果啓用了Javascript,Javascript函數將被解僱,並將隱藏字段的值設置爲1.如何在頁面加載之前執行Javascript函數?

我想檢查服務器端Page_load的隱藏值。但問題是JavaScript在頁面加載後被觸發。

你有什麼建議嗎?

HTML部分

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

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

代碼部分

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

您忘記了Web是客戶端/服務器模型。你接近這個方式是不可能的。這是一個簡單的雞和雞蛋的情況下,馬前等車。隱藏領域的更新值將不可用,直到表單被髮回。 – x0n 2009-05-20 03:00:10

+0

哈哈..我不會忘記我所知道的。我想要一些建議從服務器端獲得javascript狀態。我想現在有一些我無法想到的方法。 – miti737 2009-05-20 05:59:49

回答

11

背後想都沒想太辛苦你正在嘗試的方向走去,那裏是所有瀏覽器都支持的很少使用的標籤稱爲NOSCRIPT。

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

正如你所看到的,這個想法是讓瀏覽器請求一個圖像,但只有在javascript被禁用的情況下。此頁面可以設置一個會話變量,指出當前客戶端沒有腳本功能,可用於當前會話中的所有代碼。

或者,你可以按照你目前的方法:

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

希望這有助於

-Oisin

+0

感謝您的回覆。 使用你的第二個選項 <腳本類型=「文/ JavaScript的後rendrered的HTML 「> <! - document.write(''); // - > <輸入ID = 「MyDetail_test1」 類型= 「隱藏」 值= 「0」 NAME = 「MyDetail $測試1」/> 其實我想從服務器端的價值。如果我添加runat =「server」,如果啓用了js,則隱藏的字段可以被修改。你建議什麼? – miti737 2009-05-20 03:15:11

+2

javascript在_server_上的_client_頁面上運行。就像我在你對原始問題的評論中提到的那樣,你試圖做的事情是不可能的。爲了讀取該字段的* new *值,必須發生回發。瀏覽器和頁面之間並沒有真正的聯繫。 – x0n 2009-05-20 03:18:17

+0

感謝Oisin的幫助和建議。我贊同你。 – miti737 2009-05-20 04:12:20

1

Unobtrusive JavaScript可能會感興趣的。讓頁面正常降級將簡化開發。最初設計無JavaScript,並增強體驗。如果您的應用程序非常強大並且絕對需要它運行,這可能不是一種選擇。在這種情況下,使用noscript標記來通知用戶他們需要啓用JavaScript,這將是一個好主意。

另外,看看x0n的評論。這裏有一個幫助理解HTTP request life cycle的參考資料。

2

javascript可以自行設置cookie。

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

這是否解決了您的問題?

3

您應該將您的腳本或無腳本標頭作爲頁面繪製到自身上,然後在開啓javascript的情況下將其重定向(通過元標記或腳本location.href)到您想要去的下一個位置。這將需要2個步驟,但它會讓你找到你想要的結果。您可以在重定向查詢中將所需信息傳回給自己。

相關問題