2009-05-20 119 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个步骤,但它会让你找到你想要的结果。您可以在重定向查询中将所需信息传回给自己。

相关问题