在Internet Explorer的新选项卡中打开链接时,SessionStorage不为空

Rom*_*rin 5 javascript internet-explorer session-storage

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

当我在浏览器中打开新页面时效果很好.
但是,当我通过鼠标右键单击链接并在IE 11中选择"在新选项卡中打开链接"时 - sessionStorage不为空.所以我对新id的期望失败了.

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

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

Ter*_*nen 6

我知道这是一个古老的问题,但我今天只是在努力解决这个问题.我正在打开一个带有链接的新选项卡,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));
}
Run Code Online (Sandbox Code Playgroud)

这从已关闭的早期选项卡中获取数据.

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

工作代码:

$(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);
}
Run Code Online (Sandbox Code Playgroud)

这非常有效.在关闭选项卡/窗口之前,窗口名称将保持不变,这正是我期望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);
}
Run Code Online (Sandbox Code Playgroud)

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