Javascript 如何在窗体重新加载期间存储具有循环引用的对象?

Javascript 如何在窗体重新加载期间存储具有循环引用的对象?,javascript,Javascript,我有两个可以在浏览器中同时打开的窗口。窗口名是 估计数 实际成本 我的父窗口是“实际成本”。它有一个按钮“查看估计”。单击它,估计窗口将打开。现在,当我在“估算”窗口中保存某些内容时,我希望刷新“实际成本”窗口。我可以使用window.opener对象轻松执行。即 window.opener.location.reload(); 现在,棘手的情况。(更新父窗口时刷新子窗口) 我点击了ActualCosts窗口上的“查看估算”按钮 因此,我有一个对已打开窗口的引用var myRef=window

我有两个可以在浏览器中同时打开的窗口。窗口名是

  • 估计数
  • 实际成本
  • 我的父窗口是“实际成本”。它有一个按钮“查看估计”。单击它,估计窗口将打开。现在,当我在“估算”窗口中保存某些内容时,我希望刷新“实际成本”窗口。我可以使用
    window.opener
    对象轻松执行。即

    window.opener.location.reload();
    
    现在,棘手的情况。(更新父窗口时刷新子窗口)

  • 我点击了ActualCosts窗口上的“查看估算”按钮
  • 因此,我有一个对已打开窗口的引用
    var myRef=window.open(“estpage.htm”)
  • 当我在父窗口上保存某些内容时,可以执行重新加载,如
    myRef.location.reload()
  • 现在我在窗口上更改了一些内容并保存了。它重新加载父窗口,并在重新加载表单时使myRef为null
  • 我的疑问是如何在重新加载窗口时保持myRef对象。我尝试了JSON.stringify并将它们存储在
    document.cookie
    /
    window.localStorage
    中,并在需要时将其作为对象再次解析。当我stringify时,我得到了一个循环引用错误,因此我使用了
    JSON.stringify的重载,如下所示

    var newWindowReference = window.open(newWindowName);
    var seen = [];
    var json = JSON.stringify(newWindowReference, function (key, val) {
        if (typeof val == "object") {
            if (seen.indexOf(val) >= 0) { return };
            seen.push(val);
        }
        return val;
    });
    window.localStorage.setItem("newWindowRef", json);
    //CreateCookie(("newWindowRef", json, 0);//length limit a concern too.
    
    但这是行不通的。已解析的对象将
    myRef.location
    作为空对象。 所以我的怀疑是

  • 如何跨窗体重新加载持久化window.open的对象引用
  • 是否有其他方法可以引用此打开的窗口
  • 或者是否有一种通用的方法来跨窗体重新加载存储对象
  • 我们将非常感谢任何指导


    注:我知道轮询更改是一个更好的选择,但我关心的是如何捕获winRef对象。

    Show please working code onjsfiddle@FSou1:JSFIDLE中的工作代码?