Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅在第一页加载时进行工作,而不是在用户通过返回/前进来时_Javascript_Jquery - Fatal编程技术网

Javascript 仅在第一页加载时进行工作,而不是在用户通过返回/前进来时

Javascript 仅在第一页加载时进行工作,而不是在用户通过返回/前进来时,javascript,jquery,Javascript,Jquery,我想在用户第一次登陆我的页面时做一些工作(通过链接或直接输入URL)。但是,如果用户离开其他地方,通过后退/前进按钮回到我的页面,我不想再做这项工作 实现这一目标的最佳方式是什么 注意:如果用户点击刷新按钮,强制重新加载页面,则应完成此工作。我认为解决您问题的方法是存储会话cookie,该cookie将在当前浏览器打开时保留,然后过期-这很容易使用 然后你就可以像这样轻松地设置cookie了 $.cookie("example", "foo"); 如果cookie不存在,您所谈论的工作将被执行

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

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


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

我认为解决您问题的方法是存储会话cookie,该cookie将在当前浏览器打开时保留,然后过期-这很容易使用

然后你就可以像这样轻松地设置cookie了

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

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

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

  • 在服务器生成的页面中嵌入随机的nonce密钥
  • JS检查cookie中是否存在此随机nonce?
  • 如果它不存在,请将其保存在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.
    }