我有一些JavaScript,如果在ASP.Net的Session中存在值,它会显示一个通知。这可能不是我现在学到的最好的解决方案,但下面是代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (Session["Alert"] != null)
{
Page.ClientScript.RegisterStartupScript(GetType(), "alert", Session["Alert"].ToString());
Session["Alert"] = null;
}
}
}Session["Alert"]有显示通知的JS函数:
Session["Alert"] = "showAlert('test')";
function showAlert(msg) {
alert(msg);
}如果已为其赋值,则代码将成功运行,并显示通知。单击浏览器的“后退”按钮,然后单击“前进”按钮,将再次显示警报,因为页面不会经历其生命周期。
如何防止警报多次显示?我尝试添加一个全局JavaScript变量,如var alertShown = false;,并在showAlert函数中检查该变量,但不起作用。
有没有跨浏览器的方法可以绕过这个问题?
发布于 2013-07-31 05:09:19
好吧,对于初学者来说,你必须避免使用客户端的导航缓存(通常后退/前进实际上并不会将页面拉回原处)。
在这个障碍之后,您可以(讽刺地)使用一个会话变量来存储它是否被查看过的输出,并且只将其转储到页面一次。
如果这看起来很多,您可以在函数中添加cookie检查,这样当它运行(并重新运行)时,它会检查cookie,如果没有cookie,则会发出警报并设置cookie。伪码:
function showAlert(msg){
if (cookie[msg] == null){ // a cookie doesn't exist for this msg
alert(msg); // alert the msg
cookie[msg] = true; // set the cookie so the next pass is ignored
}
}https://stackoverflow.com/questions/17957385
复制相似问题