Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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_Html_Browser - Fatal编程技术网

第一次打开浏览器窗口/选项卡后执行JavaScript代码

第一次打开浏览器窗口/选项卡后执行JavaScript代码,javascript,html,browser,Javascript,Html,Browser,是否有一种方法可以在浏览器中的窗口或选项卡打开时只执行一次JavaScript代码,然后在该窗口/选项卡的整个生命周期内(即使被导航离开)不再执行该代码?有一种方法可以像这样使用window.sessionStorage if (!window.sessionStorage.getItem("isExecuted")) { //execute code window.sessionStorage.setItem("isExecuted", true); } sessionSt

是否有一种方法可以在浏览器中的窗口或选项卡打开时只执行一次JavaScript代码,然后在该窗口/选项卡的整个生命周期内(即使被导航离开)不再执行该代码?

有一种方法可以像这样使用
window.sessionStorage

if (!window.sessionStorage.getItem("isExecuted")) {
    //execute code
    window.sessionStorage.setItem("isExecuted", true);
}

sessionStorage属性允许您访问会话存储 对象sessionStorage与Window.localStorage类似,后者是 区别在于,当localStorage中存储的数据没有过期设置时, 页面会话结束时,存储在sessionStorage中的数据将被清除。 只要浏览器处于打开状态并继续运行,页面会话就会持续 跨页面重新加载和恢复在新选项卡或窗口中打开页面 将导致启动新会话,这与如何启动不同 会话cookies工作


您可以使用localStorage

本地存储是按源(按域和协议)进行的。来自同一来源的所有页面都可以存储和访问相同的数据


localStorage对象存储的数据没有过期日期。关闭浏览器时,数据不会被删除,并将在第二天、第二周或第二年可用


Doc:

这是一个基于检查window.history.length为1(即他们第一次访问此窗口/选项卡)的解决方案。它还检查他们是否只是刷新了页面

if(window.history.length === 1 && performance.navigation.type  !== 1){
     alert("show me once per tab");
} 

如果您将要运行的脚本放在我有警报的地方,它应该对您尝试执行的操作有效。

您的意思是:即使您在同一窗口/选项卡的不同页面中导航?@jeremycastelli Yes您可以使用cookie记录您已运行脚本,然后仅在未设置cookie的情况下运行脚本。用户当然可以删除cookie,但大多数情况下他们不会这样做。@LeoFarmer但当用户打开一个新选项卡时,我希望代码再次运行。每个选项卡仅一次。正如@LeoFarmer所说,使用Cookies我尝试过这个方法,但问题是当你“在新选项卡中打开”时,你导航的选项卡中的会话存储会被复制到新选项卡中。它不会出现在firefox中。将在IE11I出现以下已知问题()时检查返回工作状态。但它似乎没有得到解决。这种情况仍然会发生。但即使在他们关闭浏览器后,这种情况也会持续。“localStorage对象存储的数据没有过期日期。浏览器关闭时,数据不会被删除,并且将在第二天、第二周或第二年可用。”这正是我所说的,也是问题所在。如果标签关闭,他们需要清除它。哦,是的。。对不起,我做的正好相反。
if(window.history.length === 1 && performance.navigation.type  !== 1){
     alert("show me once per tab");
}