JavaScript和浏览器的后退/前进按钮

时间:2013-07-30 21:05:24

标签: javascript asp.net http browser cross-browser

我有一些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);
}

如果已为其分配值,则代码会成功运行并显示通知。单击浏览器的后退按钮然后再转发按钮再次显示警报,因为该页面未经过其生命周期。

如何防止警报多次出现?我尝试添加一个像var alertShown = false;这样的全局JavaScript变量,然后在showAlert函数中检查它,但这不起作用。

我是否可以通过跨浏览器方式解决此问题?

1 个答案:

答案 0 :(得分:0)

嗯,对于初学者来说,你必须避开客户端的导航缓存(通常后退/前进实际上不会将页面拉回来)。

在那个障碍之后,你可以看一下(具有讽刺意味的是)使用会话变量来存储它是否被查看[输出]并且只将它转储到页面一次。

如果这看起来很多,你可以在函数中添加一个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
  }
}