会话存储在不同的选项卡上不起作用

时间:2017-02-02 12:04:48

标签: javascript html5 local-storage

我想在本地服务器上使用sessionStorage在不同选项卡之间传递一些数据。我尝试了一些方法,但没有成功。有人请帮帮我。

这是我设置数据的一个文件。

if (typeof(Storage) !== "undefined") {
    var loggedInUserId = loggedInId;
    console.log(loggedInUserId);
    sessionStorage.clear();
    sessionStorage.setItem("loggedin_id", loggedInUserId);
    console.log(sessionStorage);
}

我正在尝试从本地驱动器的另一个项目的其他文件中获取数据

var companyId = sessionStorage.getItem("loggedin_id");

问题是,数据是在浏览器上设置的,但当我检查其他项目选项卡时,存储空白。

注意:我的两个项目都在两个驱动器中,不知道它有什么区别。请有人给我一些解决方法。谢谢。

2 个答案:

答案 0 :(得分:2)

会话存储不适合您应该使用本地存储的任务 对于sessionStorage,更改仅适用于每个窗口(或Chrome和Firefox等浏览器中的选项卡)

在您的情况下,您希望在不同的标签中共享数据,以便您可以执行以下操作:

if (typeof(Storage) !== "undefined") {
    localStorage.setItem("firstname", "fady");
} else {
    // Sorry! No Web Storage support..
}

然后您可以像使用会话存储一样检索它

var firstname = localStorage.getItem("firstname");

答案 1 :(得分:0)

Fady Sadek的答案是正确的方法,我会在获取值之前添加一个检查localStorage是否可用,以及在尝试获取数据之前是否实际保存了数据。

JS Fiddle

function saveText() {
    if (typeof(Storage) !== "undefined") {
        localStorage.setItem("myData", "Hello, Rajesh!");
        alert('Data saved.');
    } else {
        alert('Local storage not available');
    }
}

function getText() {
    if (typeof(Storage) !== "undefined" && typeof(localStorage.getItem('myData')) !== "undefined") {
        alert(localStorage.getItem('myData'));
    } else {
        alert('Local storage not available or the data is not saved.');
    }
}

请记住scopes of the storage,您只能在相同子域和/或域中的标签/窗口之间使用它。