【问题标题】:Replacement for window.sessionStorage in Javascript?在 Javascript 中替换 window.sessionStorage?
【发布时间】:2009-05-11 20:58:43
【问题描述】:

我有一个带有启动页面的应用程序,它需要确定已打开的内容,因此它不会重新打开已在另一个新选项卡中打开的内容。在 Firefox 中,我能够通过使用 window.sessionStorage 来存储打开的页面的标题,然后使用带有以下代码的 window.opener 从列表中删除标题来完成这项工作。

Gecko Session Storage Info Page

if (window.sessionStorage) {
    if (window.sessionStorage.getItem(code)) {
        return; // page already open
    }
    else {
       window.sessionStorage.setItem(code, code);
       window.open("Sheet.aspx", "_blank");
    }
}

在打开的页面上:

function signalPageExit() {
    if (window.opener.sessionStorage) {

    window.opener.sessionStorage.removeItem(
     document.getElementById("runcode").childNodes[0].textContent); 
}

这在 IE 中不起作用,所以我决定使用 cookie 策略,但 cookie 从未从动态启动页面的代码中成功删除,因此页面一旦被删除就无法从启动页面重新打开启动直到 cookie 过期。

我的第二次尝试是在我自己的 sessionStorage 不存在时定义它。看起来像这样:

    function setStoreItem(name, val) {
        this.storage[name] = val;
    }

    function getStoreItem(name) {
        return(this.storage[name]);
    }

    function removeStoreItem(name) {
        this.storage[name] = null;
    }

    function sesStorage() {
        this.storage = new storageData();
        this.setItem = setStoreItem;
        this.getItem = getStoreItem;
        this.removeItem = removeStoreItem;
    }

    // storage object type declaration
    function storageData() {

    }

    // IE 7 and others
    else {
        window.sessionStorage = new sesStorage();

        window.sessionStorage.setItem(code, code);
        window.open("Sheet.aspx", "_blank");
    }

但似乎真正的会话存储是特殊的,这个普通的窗口对象在回发后并没有保持活动状态,因此当我的启动页面回发时,创建的页面标题列表被清除了。

所以现在我正在寻找一种方法来完成这项工作。我有一个名为 scoresheets.aspx 的启动页面,它根据用户请求创建动态页面。这些页面共享大量的 JavaScript 代码,可以对其进行修改以使其正常工作。

我不想在用户尝试重新打开已启动的页面时刷新它们,但是如果有某种方法可以检测已打开页面的标题或使用其他方法来使用 window.opener 与相同的持久性进行通信sessionStorage 有,我很乐意使用它。

【问题讨论】:

    标签: asp.net javascript cross-browser


    【解决方案1】:

    Eric Garside 的 jStore plugin 为多个客户端存储引擎提供了一个基于 jquery 的 API。

    【讨论】:

    • 我继续设置 jStore,但我在 Jstore javascript 内部遇到错误。我在谷歌代码上提交了一个问题,所以希望我能弄清楚那里出了什么问题。
    • 我自己没有尝试过闪存引擎。我刚刚检查了 ie 引擎 (#userdata),它可以在 ie6 到 ie8 上运行。
    【解决方案2】:

    您应该使用该 cookie 策略并将这些 cookie 设置为在窗口(选项卡)关闭时过期。应该可以跨浏览器工作。

    【讨论】:

    • Cookies 被发送到服务器。如果您有大量数据要存储,那么一切都会变得非常非常缓慢。
    猜你喜欢
    • 2014-07-27
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2011-01-16
    • 2012-12-13
    • 2011-10-26
    • 1970-01-01
    相关资源
    最近更新 更多