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