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

SessionStorage is not empty when link opened in new tab in Internet Explorer

本文关键字:链接 SessionStorage 新选项 Explorer Internet 选项      更新时间:2023-09-26

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

当我在浏览器中打开新页面时,效果很好。
但是当我用鼠标右键点击一个链接,并在IE 11中选择"在新标签中打开链接"时,sessionStorage不是空的。所以我对新id的期望落空了。

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

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

我知道这是一个古老的问题,但今天我自己也在努力解决这个问题。我正在打开一个带有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);
}