【问题标题】:How can I execute Javascript function before Page load?如何在页面加载之前执行 Javascript 函数?
【发布时间】:2010-10-27 12:29:04
【问题描述】:

我正在使用隐藏字段“Isjsenabled”来检测客户端的 Javascript 是启用还是禁用。如果启用了 Javascript,则会触发 Javascript 函数并将隐藏字段的值设置为 1。

我想检查服务器端 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");
}

【问题讨论】:

  • 您忘记了 Web 是客户端/服务器模型。你接近这个的方式是不可能的。这是一个先有鸡还是先有蛋的简单案例,本末倒置等。隐藏字段中的更新值将在表单回发之前不可用。
  • 哈哈..我没有忘记我所知道的。我想要一些建议来从服务器端获取 javascript 状态。我想有一些方法是我目前无法想到的。​​

标签: .net asp.net javascript browser


【解决方案1】:

您应该将您的脚本或 noscript 标头作为一个页面绘制到自身上,然后根据是否打开 javascript 重定向(通过元标记或通过脚本 location.href)到您想要去的下一个位置。这将需要 2 个步骤,但它会为您提供您正在寻找的结果。您可以在重定向的查询中将您需要的信息传回给自己。

【讨论】:

  • 谢谢德雷德尔。实际上我有一个带有“Go”按钮的网格。我想在 grid_ItemCommand 方法中使用动态查询字符串重定向相应的 js/nonjs 页面。这就是为什么我需要从后面的代码中了解浏览器状态的原因。现在在我看来,我必须按照您的建议以某种方式从 javascript 重定向它
  • 请记住,“重定向”可以通过多种方式在没有 javascript 的情况下完成。您可以将隐藏表单设置为“submit()”到下一个位置,当用户按下您的“go”按钮时,您可以将 go 按钮设置为链接(随着位置更改传递参数),您可以执行旧的页面加载时的元重定向。如果您提供有关您正在做什么的更多详细信息,我可以给您一个不太笼统的建议:)
【解决方案2】:

javascript可以自己设置cookie。

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

这能解决您的问题吗?

【讨论】:

  • 感谢您的帮助。我做了同样的事情,所以我不需要从后面的代码中设置它。但是,如果有人在那之后启用了 javascript..cookie 存在。我必须从服务器端删除/设置 IJE=0。
  • 您总是可以从服务器端设置 IJE=0,然后通过 javascript 设置 IJE=1 :)
【解决方案3】:

Unobtrusive JavaScript 可能感兴趣。允许您的页面优雅地降级将简化开发。最初设计无 JavaScript 并增强体验。如果您的应用程序是 JavaScript 密集型应用程序并且绝对需要它运行,这可能不是一个选项。在这种情况下,使用 noscript 标记通知您的用户他们需要启用 JavaScript 将是一个好主意。

另外,看看 x0n 的 cmets。这里有一个参考,可以帮助理解HTTP request life cycle

【讨论】:

  • 感谢丹尼尔的建议。 “Unobtrusive JavaScript”是管理 javascript 的一种优雅方式。感谢分享。实际上,根据项目的要求,我需要检测浏览器的 Javascript 并保存在某处以在服务器端进行进一步的任务。这就是为什么我一直在寻找一个可能被我忽略的解决方案。
【解决方案4】:

无需过多考虑您尝试进入的方向,有一个所有浏览器都支持的小标签,称为 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>

希望这会有所帮助,

-奥辛

【讨论】:

  • 感谢您的回复。使用第二个选项后渲染的 html 其实我想从服务器端获取值。如果我添加 runat="server",如果启用了 js,则可以检索两个隐藏字段。你有什么建议?
  • javascript 在 server 上的页面之后在 client 上运行。就像我在对您原始问题的评论中提到的那样,您尝试做的事情是不可能的。为了读取字段的 new 值,必须进行回发。浏览器和页面之间没有真正的联系。
  • 感谢 Oisin 的帮助和建议。我同意你的看法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 2020-03-01
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多