【问题标题】:SessionStorage is not empty when link opened in new tab in Internet Explorer在 Internet Explorer 的新选项卡中打开链接时 SessionStorage 不为空
【发布时间】:2020-08-31 13:18:42
【问题描述】:

我需要在每个打开的浏览器选项卡(在 javascript 对象中)上都有一些唯一的 ID。 Id 必须通过请求保存,我决定使用 sessionStorage 。

当我在浏览器中打开新页面时,它运行良好。
但是当我用鼠标右键单击链接并在 IE 11 中选择“在新选项卡中打开链接”时 - sessionStorage 不为空。所以我对新 id 的期望落空了。

Chrome 以另一种方式工作,sessionStorage 为空。

有谁知道如何为 IE 解决这个问题?

【问题讨论】:

  • 经过一些实验,我发现新标签中的 sessionStorage 已从我单击的标签中复制。

标签: javascript internet-explorer session-storage


【解决方案1】:

我知道这是一个古老的问题,但我今天自己也在努力解决这个问题。我正在打开一个带有target="_blank" 链接的新选项卡,希望 sessionStorage 为空。不是。

注意:所有这些都是未经测试的代码,但你应该得到 jist。我遇到此问题的浏览器也是 Firefox 44.0.2。

我的代码大致如下:

有问题的代码:

$(window).ready(function(){
    //Get saved session data
    var persistedObject = null;

    try{
        persistedObject = JSON.parse(sessionStorage.getItem('tabData'));
    }catch(e){}
});

function updateSessionStorage(){
    var objectToPersist = {};

    //Get some data to persist
    objectToPersist.value1 = "some data";

    //Save the data in the session storage
    sessionStorage.setItem('tabData', JSON.stringify(objectToPersist));
}

这会从先前关闭的选项卡中获取数据。

我通过将代码更改为以下内容解决了这个问题:

工作代码:

$(window).ready(function(){
    //Get saved session data
    var persistedObject = null;

    try{
        persistedObject = JSON.parse(window.name);
    }catch(e){}
});

function updateSessionStorage(){
    var objectToPersist = {};

    //Get some data to persist
    objectToPersist.value1 = "some data";

    //Save the data in the session storage
    window.name = JSON.stringify(objectToPersist);
}

这很好用。窗口名称会一直保留,直到您关闭选项卡/窗口,这正是我期望 sessionStorage 做的事情。如果在链接处理端没有给出名称,则新页面总是以window.name = "" 加载。

您可能会错过的事实是,您不能直接使用我的sessionStorage.setItem('tabData', 'some data') 之类的名称,但您可以通过执行以下操作轻松避免这种情况:

建议:

function updateSessionStorage(){
    var objectToPersist = {};

    try{
        objectToPersist = JSON.parse(window.name);
    }catch(e){}

    if(objectToPersist[tabData] == undefined){
        objectToPersist.tabData = {};
    }

    //Get some data to persist
    objectToPersist.tabData.value1 = "some data";

    //Save the data in the session storage
    window.name = JSON.stringify(objectToPersist);
}

我希望有人觉得这很有用。

【讨论】:

  • 太棒了!非常感谢。
  • 简而言之,这个答案的本质是:不要使用sessionStorage;请改用window.name
  • 该死,你真是个天才。太感谢了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 2012-04-25
  • 2015-10-05
  • 1970-01-01
相关资源
最近更新 更多