只能在第一页加载时工作,而不是在用户通过后退/前进时工作

时间:2012-09-07 19:07:23

标签: javascript jquery

当用户首次登陆我的页面时(通过链接或直接输入URL),我想做一些工作。但是,如果用户在其他地方离开并通过后退/前进按钮返回我的页面,我不想再做这项工作。

实现这一目标的最佳方式是什么?

注意:如果用户点击刷新按钮,强制页面重新加载,则应该完成工作。

6 个答案:

答案 0 :(得分:2)

if (performance.navigation.type !== performance.navigation.TYPE_BACK_FORWARD) {
     //No back or forward button.
}

我想这与localStorage相结合。

答案 1 :(得分:1)

下面概述了一种可能的方法,尽管它并不优雅。

  1. 在服务器生成页面中嵌入随机现时密钥
  2. JS检查cookie中是否存在此随机现时值?
    1. 如果它不存在,请将其保存在cookie中并运行脚本
    2. 如果存在,则页面是从浏览器内存加载的,因此不是新的负载。

答案 2 :(得分:1)

只是一个想法:

浏览器通常会记住输入值,因此当您导航回来时它们会出现。

您可以使用输入(使用CSS隐藏)。

Onload检查输入的当前值是否具有特殊值(此值必须在服务器端生成,因此在使用后退/前进时不会刷新)

<script  type="text/javascript">
jQuery(
  function($)
  {
    if($('#history').val()==$('#history').data('value'))
    {
      alert('you did use back/forward');
    }    
    else
    {
      $('#history').val($('#history').data('value'));
      alert('you did not use back/forward');
    }    
  }
);
</script>
<input style="display:none" id="history" data-value="<?php echo time();?>"/> 

当用户使用后退/前进时,输入值等于数据值属性(但不是当用户点击F5时,因为那时data-value-attribute也会刷新)。

答案 3 :(得分:0)

最好的方法是使用HTML5网络存储,使用会话存储。当页面loas第一次检查是否设置了本地存储变量并存储了一些数据时,如果没有则设置数据,如果用户使用next / prev按钮并在调用pageload事件时再次返回,则可以检测到该用户之前在此处不是第一页加载。看这个演示 http://www.amitpatil.me/demos/html5-web-storage/web_storage.html以下是详细文章http://www.amitpatil.me/introduction-to-html5-feature-web-storage/

答案 4 :(得分:0)

LocalStorage在这里会很好。与cookie类似,但仅存在于客户端,没有与标题一起发送。其他人说的相同或相似,我希望这个例子告诉你这一切是多么容易。

因此,您将变量的值设置为当前页面的标识符,并将其引用到变量A)existing,并将B)设置为第一页。

<script>
if( !localStorage["lastPage"] && localStorage["lastPage"] != theFirstPageIdentifier ) {
   // this is the first view
   localStorage["lastPage"] = currentPageIdentifier;
}
</script>

注意:旧版本的IE(可能是其他版本)不提供localStorage,并且可以在此处使用cookie进行回退。同样的概念。

我觉得您需要一个示例来向您展示这将有效:http://rlemon.github.com/demos/12323999/page1.html查看来源。

答案 5 :(得分:-1)

我认为您的问题的解决方案是存储会在当前浏览器打开时保留的会话cookie,然后将过期 - 使用jQuery Cookie Plugin

这很容易

然后你可以像这样轻松地设置一个cookie

$.cookie("example", "foo");

如果cookie不存在,您所谈论的工作将被执行,而忽略的是cookie存在