当前位置: 首页 > 面试题库 >

浏览器sessionStorage。标签之间共享?

查宜民
2023-03-14
问题内容

我的网站上有一些值,要在关闭浏览器时清除这些值。我选择sessionStorage存储这些值。当选项卡关闭时,它们确实被清除,并且如果用户按下f5则保留;但是,如果用户在其他选项卡中打开某些链接,则这些值不可用。

如何sessionStorage在应用程序的所有浏览器选项卡之间共享值?

用例:将值存储在某个存储器中,使该值可在所有浏览器选项卡中访问,并在所有选项卡都关闭时清除它。

if (!sessionStorage.getItem(key)) {
    sessionStorage.setItem(key, defaultValue)
}

问题答案:

您可以使用localStorage及其“存储” eventListener将sessionStoragehtml" target="_blank">数据从一个选项卡传输到另一个选项卡。

此代码将需要存在于所有选项卡上。它应该在其他脚本之前执行。

// transfers sessionStorage from one tab to another
var sessionStorage_transfer = function(event) {
  if(!event) { event = window.event; } // ie suq
  if(!event.newValue) return;          // do nothing if no value to work with
  if (event.key == 'getSessionStorage') {
    // another tab asked for the sessionStorage -> send it
    localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage));
    // the other tab should now have it, so we're done with it.
    localStorage.removeItem('sessionStorage'); // <- could do short timeout as well.
  } else if (event.key == 'sessionStorage' && !sessionStorage.length) {
    // another tab sent data <- get it
    var data = JSON.parse(event.newValue);
    for (var key in data) {
      sessionStorage.setItem(key, data[key]);
    }
  }
};

// listen for changes to localStorage
if(window.addEventListener) {
  window.addEventListener("storage", sessionStorage_transfer, false);
} else {
  window.attachEvent("onstorage", sessionStorage_transfer);
};


// Ask other tabs for session storage (this is ONLY to trigger event)
if (!sessionStorage.length) {
  localStorage.setItem('getSessionStorage', 'foobar');
  localStorage.removeItem('getSessionStorage', 'foobar');
};

我在chrome,ff,safari(即11,即10,即9)中对此进行了测试

这种方法“应该在IE8中工作”,但是由于我每次在任何网站上打开标签页…任何标签页时IE崩溃,我都无法对其进行测试。(不错的IE)PS:如果您也想同时支持IE8,则显然需要包括JSON填充程序。:)



 类似资料:
  • 用例:将一个值放入某个存储区,在所有浏览器选项卡中保持该值可访问,并在所有选项卡关闭时清除该值。

  • 问题内容: 在同一浏览器的选项卡/窗口之间进行JavaScript通信的最可靠方法是什么?例如,当选项卡2开始播放音频时,选项卡1以某种方式知道这一点并可以暂停其播放器。 我正在建立一个带有音乐播放器的网站…因此,如果您现在打开该网站的两个标签,则可以同时在两者上播放音乐。这显然是不好的,所以我正在尝试寻找解决方案。 有任何想法吗?谢谢 问题答案: 这是一个旧的答案,我建议使用此处描述的现代版本:

  • 问题内容: 我正在使用JavaScript客户端(在浏览器中运行)和Node.js服务器创建一个小型应用程序,并使用WebSocket进行通信。 我想在客户端和服务器之间共享代码。至少可以说,我才刚刚开始使用Node.js,而我对现代JavaScript的了解还有些生疏。因此,我仍然对CommonJS require()函数有所了解。如果我使用“导出”对象创建程序包,那么我将看不到如何在浏览器中使

  • 问题内容: 如何在用户离开Gmail之前向用户要求确认? 我在各个地方搜索了这个问题,但他们提到的只是使用javascript window.unload 和 window.onbeforeunload 。而且,由于它被阻塞,大多数情况下在chrome中都不起作用。 问题答案: 尝试这个:

  • 本文向大家介绍如何实现浏览器内多个标签页之间的通信?相关面试题,主要包含被问及如何实现浏览器内多个标签页之间的通信?时的应答技巧和注意事项,需要的朋友参考一下 通过WebSocket或SharedWorker把客户端和服务器端建立socket连接,从而实现通信;也可以调用localstorge、cookies等本地存储方法  

  • 我想在浏览器的两个选项卡之间切换。目前试图获取窗口句柄的数量,但即使打开了2个选项卡,其显示为1。