我需要在每个打开的浏览器选项卡上(在javascript对象中)都有一些唯一的ID。必须通过请求保存Id,我决定使用sessionStorage。
当我在浏览器中打开新页面时效果很好。
但是,当我通过鼠标右键单击链接并选择“在新标签页中打开链接”时,在IE 11中 - sessionStorage不为空。所以我对新身份的期望失败了。
Chrome以另一种方式工作,sessionStorage为空。
有谁知道如何解决IE的这个问题?
答案 0 :(得分:6)
我知道这是一个古老的问题,但我今天只是在努力解决这个问题。我正在打开一个新标签,其中包含$(document).ready(function(){
$("p").hide();
$("li").click(function(){
$("p").not($(this).find("p")).hide(200);
$(this).find("p").toggle(200);
});
});
的链接,期望sessionStorage为空。事实并非如此。
注意:所有这些都是未经测试的代码,但你应该得到jist。我遇到此问题的浏览器还有Firefox 44.0.2。
我的代码是这样的:
有问题的代码:
target="_blank"
这从已关闭的早期标签中获取了数据。
我通过将代码更改为以下内容来解决这个问题:
工作代码:
$(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));
}
这很有效。在关闭选项卡/窗口之前,窗口名称将保持不变,这正是我期望sessionStorage执行的操作。如果链接处理方没有给出名称,则新页面始终加载$(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);
}
。
你可能会错过的是你不能直接使用我的window.name = ""
这样的名字,但你可以通过这样的方式轻松避免这种情况:
<强>建议:强>
sessionStorage.setItem('tabData', 'some data')
我希望有人觉得这很有用。