在Page_Load事件之前运行Javascript

时间:2014-09-16 19:16:09

标签: javascript asp.net

我有以下JS,目前它就在我的结束体标记

之前
<script type='text/javascript' src='https://www.mydomain.com/jtrack.js'></script>
<script type='text/javascript' >
if (typeof trackPage == 'function') trackPage();
</script>

此脚本的一部分设置了一个cookie,我需要在我的asp.net页面的Page_Load事件中阅读。但是该事件在cookie设置之前触发。如何更改此脚本以便脚本先运行?

由于

2 个答案:

答案 0 :(得分:3)

简单回答,你不能。这在技术上是不可能的。

如果查看ASP.NET page lifecycle overview,您会看到页面加载事件发生在页面开始呈现之前 - 这将使客户端完全无法在页面上执行JavaScript ,用户代理(浏览器)甚至没有开始收到该页面。除了卸载之外,所有ASP.NET页面生命周期事件都发生在服务器上,并且在将任何响应发送给用户之前。

除非您正在向用户传输响应,在页面的第一个可能点上拥有JavaScript(没有依赖关系),并且正在构建非常复杂的页面响应,否则在您的JavaScript之后,unload事件几乎不可能执行。 。即使JavaScript在启动unload事件之前以某种方式执行,也无关紧要,因为cookie与页面请求一起发送并且已经发生。在来自该域的下一个请求之前,不会发送cookie(尽管它不必是请求的页面,图像,脚本或样式表请求都将在其请求标头中包含cookie)。

您可以让JavaScript在第一个请求中设置cookie,然后可以在Load事件处理程序中的所有后续请求中使用,并使用Ajax请求(如果需要)记录该初始页面和指定的cookie值 - 将在Ajax请求的标头中发送(假设已在该点设置)。

您不能做的是在用户访问您的网站之前在用户的浏览器上设置cookie,在将JavaScript发送给用户之前执行JavaScript,或者通过响应发送新的请求数据。 / p>

答案 1 :(得分:0)

使用JS setTimeout 例如。

ScriptManager.RegisterStartupScript(this, this.GetType(), "TestMessageModal", string.Format("setTimeout(function(){{swal('{0}','{1}');}},{2});", type, CommonUtils.RemoveSpecialCharacters(Message), timeout), true);