2009-05-20 35 views
6

Tôi đang sử dụng trường ẩn 'Isjsenabled' để phát hiện xem Javascript của ứng dụng được bật hay tắt. Nếu Javascript được bật, chức năng Javascript sẽ được kích hoạt và nó sẽ đặt giá trị của trường ẩn thành 1.Làm cách nào để thực thi chức năng Javascript trước khi tải trang?

Tôi muốn kiểm tra giá trị ẩn từ phía máy chủ Page_load. Nhưng vấn đề là Javascript bị đuổi sau khi tải trang.

Bạn có đề xuất nào không?

Html Phần

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

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

Mã Đằng sau Phần

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

Bạn quên rằng web là mô hình máy khách/máy chủ. Cách bạn đang tiếp cận điều này là không thể. Nó là một trường hợp đơn giản của gà và trứng, giỏ hàng trước khi con ngựa vv. Giá trị cập nhật trong lĩnh vực ẩn sẽ không có sẵn cho đến khi hình thức được đăng trở lại. – x0n

+0

ha ha..Tôi không quên những gì tôi biết. Tôi muốn một số gợi ý để có được trạng thái javascript từ serverside. Tôi nghĩ có một số cách mà tôi không thể nghĩ vào lúc này. – miti737

Trả lời

11

Nếu không suy nghĩ quá cứng về hướng bạn đang cố gắng để đi vào, có một chút đã qua sử dụng thẻ được hỗ trợ bởi tất cả các trình duyệt được gọi là NOSCRIPT.

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

Như bạn có thể thấy, ý tưởng là làm cho trình duyệt yêu cầu hình ảnh nhưng chỉ khi javascript bị tắt. Trang này có thể đặt biến phiên cho biết rằng ứng dụng khách hiện tại không có khả năng tập lệnh có sẵn cho tất cả mã trong phiên hiện tại.

Hoặc, bạn có thể làm theo phương pháp hiện tại của bạn:

<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

Cảm ơn bạn đã trả lời. Các html rằng rendrered sau khi sử dụng tùy chọn thứ 2 của bạn Thực ra tôi muốn lấy giá trị từ phía máy chủ. Nếu tôi thêm runat = "server", cả hai trường ẩn có thể được retrived nếu js được kích hoạt. Bạn gợi ý điều gì? – miti737

+2

javascript chạy trên _client_ SAU trang trên _server_. Giống như tôi đã đề cập trong một bình luận về câu hỏi ban đầu của bạn, những gì bạn đang cố gắng làm là không thể. Để đọc giá trị * mới * của trường, phải đăng lại. Không có kết nối nào giữa trình duyệt và trang. – x0n

+0

Cảm ơn Oisin vì sự giúp đỡ và gợi ý của bạn. Tôi đồng ý với bạn. – miti737

1

Unobtrusive JavaScript có thể quan tâm. Việc cho phép các trang của bạn xuống cấp một cách duyên dáng sẽ đơn giản hóa việc phát triển. Thiết kế không có JavaScript ban đầu và nâng cao kinh nghiệm. Đây có thể không phải là một tùy chọn nếu ứng dụng của bạn cực kỳ JavaScript và đòi hỏi nó phải hoạt động. Trong trường hợp đó, sử dụng thẻ noscript để thông báo cho người dùng của bạn rằng họ cần JavaScript được bật sẽ là một ý tưởng hay.

Ngoài ra, hãy xem nhận xét của x0n. Dưới đây là tham chiếu để giúp hiểu số HTTP request life cycle.

+0

Cảm ơn Daniel đã đề xuất của bạn. 'JavaScript không phô trương' là một cách thanh lịch để quản lý javascript. Cám ơn vì đã chia sẻ. Thực ra theo yêu cầu của dự án, tôi cần phát hiện Javascript của trình duyệt và lưu ở đâu đó để thực hiện thêm nhiệm vụ ở phía máy chủ. Đó là lý do tại sao tôi đang tìm kiếm một giải pháp có thể bị tôi bỏ qua. – miti737

2

javascript có thể tự đặt cookie.

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

Điều này có giải quyết được sự cố của bạn không?

+0

Cảm ơn sự giúp đỡ của bạn. Tôi đã làm điều tương tự để tôi không cần phải đặt nó từ mã phía sau. Nhưng nếu ai đó bật javascript sau đó ... cookie tồn tại. Tôi phải xóa/đặt IJE = 0 từ phía máy chủ. – miti737

+0

Bạn luôn có thể đặt IJE = 0 từ phía máy chủ, và sau đó đặt IJE = 1 theo javascript :) –

3

bạn nên vẽ tiêu đề tập lệnh hoặc tiêu đề noscript của mình dưới dạng trang vào chính nó rồi chuyển hướng (thông qua thẻ meta hoặc thông qua vị trí tập lệnh.href) đến địa điểm tiếp theo bạn muốn dựa trên nếu javascript được bật. Nó sẽ mất 2 bước, nhưng nó sẽ giúp bạn có được kết quả mà bạn đang tìm kiếm. Bạn có thể chuyển thông tin bạn cần cho chính mình trong truy vấn chuyển hướng.

+0

Cảm ơn Dredel. Trên thực tế tôi có một lưới với một nút 'Go'. Tôi muốn chuyển hướng trang js/nonjs tương ứng với chuỗi truy vấn động tại phương thức grid_ItemCommand. Đó là lý do tại sao tôi cần biết trạng thái trình duyệt từ mã phía sau. Bây giờ Có vẻ như với tôi rằng tôi phải chuyển hướng nó bằng cách nào đó từ javascript như bạn đề nghị – miti737

+0

hãy nhớ rằng "chuyển hướng" có thể được thực hiện một vài cách mà không cần javascript. Bạn có thể thiết lập một biểu mẫu ẩn để "submit()" đến vị trí tiếp theo, khi người dùng nhấn nút "go", bạn có thể làm cho nút đi một liên kết (chuyển params cùng với sự thay đổi vị trí) và bạn có thể làm cũ Chuyển hướng meta khi trang đang tải. Nếu bạn cung cấp thêm chi tiết về những gì chính xác bạn đang làm, tôi có thể cung cấp cho bạn một lời khuyên ít tổng quát hơn :) –

Các vấn đề liên quan