2014-08-31 79 views
-1

我的要求是:如何清除浏览器上的本地存储空间但不刷新?

  1. 具有检测浏览器关闭时,它不应该执行的onpage刷新。

  2. 如果代码只适用于浏览器关闭,则必须清除localstorage。

  3. 我已经尝试过使用onbeforeunload,但它正在浏览器关闭事件和页面刷新事件上执行。

  4. 所以我的代码只适用于浏览器关闭事件而不是页面刷新(F5或单击刷新符号)。

+0

可能重复http://stackoverflow.com/questions/1631959/browser-window-close-event – 2014-08-31 07:22:51

+0

@Moogs:存储方面*可能会使这个不同。 – 2014-08-31 07:28:22

+2

如果你实际上不会坚持任何事情,为什么还要使用本地存储? – jmort253 2014-08-31 07:35:40

回答

5

您无法分辨浏览器关闭和包含正在刷新的页面的窗口/标签之间的区别。信息根本不可用。

对于您的特定用例,听起来您可能可以使用session storage而不是本地存储。会话存储的是在用户完成页面时到期。你可以尝试了这一点与this example

display("Existing <code>sessionStorage.foo</code>: " + sessionStorage.foo); 
sessionStorage.foo = new Date().toISOString(); 
display("New value set: " + sessionStorage.foo); 

对我的火狐,Chrome,IE9和(所以大概IE9 +),清爽不明确的会话存储,但关闭标签一样。

或者,您可以在卸载页面时从本地存储中设置时间戳(从onbeforeunload开始),以及当您将来返回页面时,如果该时间戳足够过时,请清除存储并开始新鲜。当您离开页面时,这并不会清除商店,但是会像一样在间隔后回来时执行此操作。

+0

但会话存储的范围仅限于一个选项卡,因此您不能使用多个选项卡功能。 – 2017-07-14 10:48:27

+0

@PrashantPokhriyal:问题中没有多个选项卡功能。但是它比任何情况下都要复杂得多:如果一个新标签(在同一个源)由一个现有标签打开,它们共享会话存储,因为新标签的浏览上下文不是顶级的浏览上下文(因为它的'开瓶器“是旧选项卡)。因此,在源选项卡中单击'target =“_ blank”'链接或使用'window.open'意味着目标选项卡共享其会话存储。 – 2017-07-14 11:51:31

+0

但是,如果一个新标签(在同一个原产地)** **不是由现有标签打开,那么? – 2017-07-14 13:05:07

0

只有浏览器关闭时没有事件被触发。最接近的是当窗口即将卸载其资源时发出的onbeforeunload事件。

+0

是的,但我必须清除localstorage只关闭事件,当我用onbeforeunload,它也执行刷新事件,所以我必须排除刷新事件..需要和需要,, PLZ找到解决方案 – user3523448 2014-08-31 07:37:56

+0

看一看在会议存储区https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Storage – 2014-08-31 07:45:21

相关问题