当用户第一次登陆我的页面时(通过链接或直接输入 URL),我想做一些工作。但是,如果用户离开其他地方并通过后退/前进按钮返回我的页面,我不想再做这项工作。
实现这一目标的最佳方法是什么?
注意:如果用户点击刷新按钮,则应该完成工作,强制重新加载页面。
当用户第一次登陆我的页面时(通过链接或直接输入 URL),我想做一些工作。但是,如果用户离开其他地方并通过后退/前进按钮返回我的页面,我不想再做这项工作。
实现这一目标的最佳方法是什么?
注意:如果用户点击刷新按钮,则应该完成工作,强制重新加载页面。
if (performance.navigation.type !== performance.navigation.TYPE_BACK_FORWARD) {
//No back or forward button.
}
Combine this with localStorage I suppose.
下面概述了一种可能的方法,尽管它一点也不优雅。
只是一个想法:
浏览器通常会记住输入值,因此当您返回时它们会出现。
您可以使用输入(用 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();?>"/>
当用户使用 back/forward 时,input-value 等于 data-value 属性(但当用户按 F5 时不等于,因为此时 data-value-attribute 也会刷新)。
最好的方法是使用 HTML5 网络存储,使用会话存储。当页面加载第一次检查是否设置了本地存储变量并存储了一些数据,如果没有设置数据,如果用户使用下一个/上一个按钮并在页面加载事件被调用时再次返回,您可以检测到该用户之前曾在这里及其不是第一页加载。请参阅此演示 http://www.amitpatil.me/demos/html5-web-storage/web_storage.html,这是详细的文章http://www.amitpatil.me/introduction-to-html5-feature-web-贮存/
LocalStorage在这里会很好。与 cookie 类似,但仅存在于客户端,没有任何内容与标头一起发送。其他人说相同或相似,我希望这个例子告诉你这一切是多么容易。
因此,您将变量的值设置为当前页面的标识符,并将其引用到变量 A) 现有和 B) 设置为第一页。
<script>
if( !localStorage["lastPage"] && localStorage["lastPage"] != theFirstPageIdentifier ) {
// this is the first view
localStorage["lastPage"] = currentPageIdentifier;
}
</script>
注意:旧版本的 IE(可能是其他版本)无法使用 localStorage,并且可以在此处使用 cookie 作为后备。相同的概念。
I feel like you need an example to show you this will work: http://rlemon.github.com/demos/12323999/page1.html view source.
我认为解决您的问题的方法是存储一个会话 cookie,该会话 cookie 在当前浏览器打开时会保留,然后会过期 - 这很容易使用jQuery Cookie 插件
然后您可以像这样轻松设置cookie
$.cookie("example", "foo");
如果 cookie 不存在,您所说的工作将被执行,而忽略 cookie 存在