Rom*_*rin 5 javascript internet-explorer session-storage
我需要在每个打开的浏览器选项卡上(在javascript对象中)都有一些唯一的ID.必须通过请求保存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));
}
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)
我希望有人觉得这很有用.
归档时间: |
|
查看次数: |
2929 次 |
最近记录: |