当打开浏览器中的窗口或选项卡时,是否有一种方法只执行一次JavaScript代码,然后在此窗口/选项卡的整个生命周期中再次执行(即使在导航时)?
像这样使用 window.sessionStorage 的一种方法 .
window.sessionStorage
if (!window.sessionStorage.getItem("isExecuted")) { //execute code window.sessionStorage.setItem("isExecuted", true); }
MDN docs
sessionStorage属性允许您访问会话存储对象 . sessionStorage类似于Window.localStorage,唯一的区别是当localStorage中存储的数据没有到期设置时,存储在sessionStorage中的数据在页面会话结束时被清除 . 只要浏览器处于打开状态,页面会话就会持续,并且会在页面重新加载和恢复后继续存在 . 在新选项卡或窗口中打开页面将导致启动新会话,这与会话cookie的工作方式不同 .
你可以使用 localStorage .
本地存储是按来源(每个域和协议) . 来自一个来源的所有页面都可以存储和访问相同的数据 . localStorage对象存储没有过期日期的数据 . 当浏览器关闭时,数据不会被删除,并且将在第二天,一周或一年中可用 .
localStorage.getItem('key'); localStorage.setItem('key', 'value');
Doc:http://www.w3schools.com/html/html5_webstorage.asp
这是一个基于检查window.history.length为1的解决方案(即他们第一次访问此窗口/选项卡) . 它还检查他们不是简单地刷新页面 .
if(window.history.length === 1 && performance.navigation.type !== 1){ alert("show me once per tab"); }
如果您将我想要运行的脚本放在我有警报的位置,那么它应该适用于您要执行的操作 .
3 回答
像这样使用
window.sessionStorage
的一种方法 .MDN docs
你可以使用 localStorage .
Doc:http://www.w3schools.com/html/html5_webstorage.asp
这是一个基于检查window.history.length为1的解决方案(即他们第一次访问此窗口/选项卡) . 它还检查他们不是简单地刷新页面 .
如果您将我想要运行的脚本放在我有警报的位置,那么它应该适用于您要执行的操作 .