Javascript 仅在第一页加载时进行工作,而不是在用户通过返回/前进来时
我想在用户第一次登陆我的页面时做一些工作(通过链接或直接输入URL)。但是,如果用户离开其他地方,通过后退/前进按钮回到我的页面,我不想再做这项工作 实现这一目标的最佳方式是什么Javascript 仅在第一页加载时进行工作,而不是在用户通过返回/前进来时,javascript,jquery,Javascript,Jquery,我想在用户第一次登陆我的页面时做一些工作(通过链接或直接输入URL)。但是,如果用户离开其他地方,通过后退/前进按钮回到我的页面,我不想再做这项工作 实现这一目标的最佳方式是什么 注意:如果用户点击刷新按钮,强制重新加载页面,则应完成此工作。我认为解决您问题的方法是存储会话cookie,该cookie将在当前浏览器打开时保留,然后过期-这很容易使用 然后你就可以像这样轻松地设置cookie了 $.cookie("example", "foo"); 如果cookie不存在,您所谈论的工作将被执行
注意:如果用户点击刷新按钮,强制重新加载页面,则应完成此工作。我认为解决您问题的方法是存储会话cookie,该cookie将在当前浏览器打开时保留,然后过期-这很容易使用 然后你就可以像这样轻松地设置cookie了
$.cookie("example", "foo");
如果cookie不存在,您所谈论的工作将被执行,而忽略的是cookie存在下面概述了一种可能的方法,尽管它一点也不优雅
最好的方法是使用HTML5Web存储,使用会话存储。当页面LOA第一次检查是否设置了本地存储变量并存储了一些数据,如果未设置,则设置数据,如果用户使用next/prev按钮并在调用pageload事件时再次返回,则您可以检测到该用户以前在这里,而不是第一次页面加载。看到这个演示了吗 下面是详细的文章只是一个想法: 浏览器通常会记住输入值,因此当您返回时,它们会出现 您可以使用输入(用CSS隐藏) Onload检查输入的当前值是否有特殊值(此值必须在服务器端生成,因此使用back/forward时不会刷新)
jQuery(
函数($)
{
if($('#history').val()=$('#history').data('value'))
{
警报(“您确实使用了后退/前进”);
}
其他的
{
$('history').val($('history').data('value');
警报(“您没有使用后退/前进”);
}
}
);
在这里会很好。工作原理与cookie类似,但仅存在于客户端,不随标头发送任何内容。其他人也说过同样或相似的话,我希望这个例子能告诉你这一切是多么容易做到
因此,您将把变量的值设置为当前页面的标识符,并将其引用到变量A)existing和B)设置为第一页
<script>
if( !localStorage["lastPage"] && localStorage["lastPage"] != theFirstPageIdentifier ) {
// this is the first view
localStorage["lastPage"] = currentPageIdentifier;
}
</script>
如果(!localStorage[“lastPage”]&&localStorage[“lastPage”]!=firstpage标识符){
//这是第一种观点
localStorage[“lastPage”]=currentPageIdentifier;
}
注意:旧版本的IE(可能还有其他版本)无法使用localStorage,可以在此处使用Cookie作为备用。同样的概念
我觉得您需要一个示例来说明这一点:查看源代码
if (performance.navigation.type !== performance.navigation.TYPE_BACK_FORWARD) {
//No back or forward button.
}
我想把它与本地存储结合起来。所谓的后退/前进,是指浏览器历史中的后退/前进吗?因为如果是这样,这是不可能通过Javascript检测到的。您可以在localstorage中存储某种标志。这就是我所能想到的…@HenrikAmmer,我已经澄清了这个问题。我希望有某种方法可以实现这一点。@elclanrs,我考虑过设置nonce cookie,但我需要让服务器先在页面中嵌入nonce cookie,这样JS就知道已经为页面的这个特定实例设置了一次nonce。这会起作用,因为导航到历史记录中的某个页面不会触发新的服务器请求,并允许我确定该页面是否已从浏览器内存加载。但是,如果历史记录中的导航未触发请求,Cookie exist/NoteExist有何区别?它不会和其他东西一起缓存吗?或者cookie总是被刷新吗?如果用户在页面上手动刷新页面,则cookie仍然存在,并且不会执行工作。在这种情况下,应该执行工作,因为用户手动刷新了页面。您可以在其中放置一个datetime,并将页面保留设置的时间量,我认为javascript或jquery中没有办法检测页面是否从后退按钮提交,以及检测页面是否正在刷新,在服务器端代码中,这更容易实现,但这行不通。用户来到页面,您将密钥123存储在存储器中。现在用户点击刷新按钮,键123存在,所以您不需要执行此项工作,但您确实应该这样做,因为这是一个刷新而不是历史导航。您是对的,我没有考虑过这种可能性:(还有另一个解决方案窗口。onbeforeunload=function(){},但在“刷新”时也会失败),窗口刷新和后退/下一步按钮调用此功能,因此我猜它对您没有用处。不起作用,原因与@www.amitpatil给出的答案相同。me@aleemb我已经为你上传了一个小演示-只会在第一页第一次查看时发出警报。代码可以修改以适应许多不同的场景。这在目标页面上不起作用e、 仅在用户导航离开的页面上。@aleemb您的意思是什么?适用于meSorry没有注意到这是性能库的一部分。在测试中,它在Chrome中正常工作,无需使用本地存储。
if (performance.navigation.type !== performance.navigation.TYPE_BACK_FORWARD) {
//No back or forward button.
}