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

时间:2014-06-24 08:54:43

标签: javascript internet-explorer session-storage

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

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

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

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

1 个答案:

答案 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')

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