java中 有没有方法将浏览器标签栏去掉_如何在浏览器窗口/选项卡关闭时删除localStorage项?...

回答(15)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

应该这样做而不是删除操作符:

localStorage.removeItem(key);

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以在JavaScript中使用 beforeunload 事件 .

使用vanilla JavaScript,您可以执行以下操作:

window.onbeforeunload = function() {

localStorage.removeItem(key);

return '';

};

这将在浏览器窗口/选项卡关闭之前删除密钥,并提示您确认关闭窗口/选项卡操作 . 我希望能解决你的问题 .

注意: onbeforeunload 方法应返回一个字符串 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

与 window 全局关键字一起使用: -

window.localStorage.removeItem('keyName');

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果您希望在浏览器关闭时删除密钥,则应使用sessionStorage .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

尝试使用

$(window).unload(function(){

localStorage.clear();

});

希望这对你有用

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

有一个非常具体的用例,其中任何使用sessionStorage而不是localStorage的建议都没有真正帮助 . 用例可能就像在打开至少一个选项卡时存储某些内容一样简单,但如果关闭最后一个选项卡,则会使其无效 . 如果您需要将值保存在交叉表和窗口中,则sessionStorage对您没有帮助,除非您使用听众复杂化您的生活,就像我尝试过的那样 . 与此同时,localStorage对此非常完美,但它的工作“太好了”,因为即使重新启动浏览器,您的数据也会在那里等待 . 我最终使用了一个利用两者的自定义代码和逻辑 .

我宁愿解释然后给代码 . 首先在localStorage中存储您需要的内容,然后在localStorage中创建一个计数器,其中包含您已打开的选项卡数 . 每次页面加载时都会增加,每次页面卸载时都会减少 . 你可以在这里选择要使用的事件,我建议'加载'和'卸载' . 在卸载时,您需要在计数器达到0时执行您想要的清理任务,这意味着您正在关闭最后一个选项卡 . 这里有一个棘手的部分:我没有找到一种可靠而通用的方法来区分页面重新加载或页面内部导航与选项卡关闭之间的区别 . 因此,如果您存储的数据不是您在检查这是第一个选项卡后可以在加载时重建的数据,那么您无法在每次刷新时将其删除 . 相反,在增加选项卡计数器之前,您需要在每次加载时在sessionStorage中存储一个标志 . 在存储此值之前,您可以检查它是否已经有值,如果没有,这意味着您第一次加载到此会话中,这意味着您可以在加载时进行清理未设置值且计数器为0 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

使用sessionStorage

sessionStorage对象等于localStorage对象,只是它只存储一个会话的数据 . 用户关闭浏览器窗口时将删除数据 .

以下示例计算用户在当前会话中单击按钮的次数:

if (sessionStorage.clickcount) {

sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;

} else {

sessionStorage.clickcount = 1;

}

document.getElementById("result").innerHTML = "You have clicked the button " +

sessionStorage.clickcount + " time(s) in this session.";

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这是一个简单的测试,看看在使用本地存储时是否有浏览器支持:

if(typeof(Storage)!=="undefined") {

console.log("localStorage and sessionStorage support!");

console.log("About to save:");

console.log(localStorage);

localStorage["somekey"] = 'hello';

console.log("Key saved:");

console.log(localStorage);

localStorage.removeItem("somekey"); //

console.log("key deleted:");

console.log(localStorage);

console.log("DONE ===");

} else {

console.log("Sorry! No web storage support..");

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我不认为这里提出的解决方案是100%正确的,因为window.onbeforeunload事件不仅在浏览器/ Tab关闭时(必要时)被调用,而且还在所有其他几个事件上被调用 . (可能不需要)

有关可触发window.onbeforeunload的事件列表的更多信息,请参阅此链接: -

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

虽然有些用户已经回答了这个问题,但我举一个应用程序设置的例子来解决这个问题 .

我遇到过同样的问题 . 我在angularjs应用程序中使用https://github.com/grevory/angular-local-storage模块 . 如果按如下方式配置应用程序,它将在会话存储中保存变量而不是本地存储 . 因此,如果您关闭浏览器或关闭选项卡,会话存储将自动删除 . 你不需要做任何事情 .

app.config(function (localStorageServiceProvider) {

localStorageServiceProvider

.setPrefix('myApp')

.setStorageType('sessionStorage')

});

希望它会有所帮助 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

为什么不使用sessionStorage?

“sessionStorage对象等于localStorage对象,除了它只存储一个会话的数据 . 当用户关闭浏览器窗口时,数据被删除 . ”

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

for (let i = 0; i < localStorage.length; i++) {

if (localStorage.key(i).indexOf('the-name-to-delete') > -1) {

arr.push(localStorage.key(i));

}

}

for (let i = 0; i < arr.length; i++) {

localStorage.removeItem(arr[i]);

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在询问问题6年后查看这个问题后,我发现这个问题仍然没有足够的答案;应该实现以下所有目标:

关闭浏览器(或域的所有选项卡)后

清除本地存储

如果至少有一个选项卡保持活动状态,则跨选项卡保留本地存储

重新加载单个选项卡时保留本地存储

在每个页面加载开始时执行这段javascript以实现上述目的:

((nm,tm) => {

const

l = localStorage,

s = sessionStorage,

tabid = s.getItem(tm) || (newid => s.setItem(tm, newid) || newid)((Math.random() * 1e8).toFixed()),

update = set => {

let cur = JSON.parse(l.getItem(nm) || '{}');

if (set && typeof cur[tabid] == 'undefined' && !Object.values(cur).reduce((a, b) => a + b, 0)) {

l.clear();

cur = {};

}

cur[tabid] = set;

l.setItem(nm, JSON.stringify(cur));

};

update(1);

window.onbeforeunload = () => update(0);

})('tabs','tabid');

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以尝试使用以下代码删除本地存储:

delete localStorage.myPageDataArr;

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这将如果你正在使用AngularJS,那就像魅力一样

$localStorage.$reset();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值