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

时间:2014-02-07 06:19:57

标签: javascript

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

  1. 估计
  2. ActualCosts
  3. 我的父窗口是“ActualCosts”。它有一个“查看估计”按钮。点击它后,将打开Estimates窗口。现在,当我在Estimates窗口中保存某些内容时,我想刷新“ActualCosts”窗口。我可以使用window.opener对象轻松执行。即,

    window.opener.location.reload();
    

    现在,这个棘手的场景。 (更新父窗口时刷新子窗口)

    1. 我点击了ActualCosts窗口中的“View Estimates”按钮
    2. 所以我引用了打开的窗口var myRef = window.open("estpage.htm");
    3. 当我在父窗口上保存某些内容时可以重新加载myRef.location.reload();
    4. 现在我在Estimates窗口上更改了一些内容并保存了。它重新加载父窗口,并在重新加载表单时使myRef为null。
    5. 我怀疑如何在窗口重新加载时保持myRef对象。我尝试了JSON.stringify并将它们存储在document.cookie / window.localStorage中,并在需要时再次将其解析为对象。当我进行字符串化时,我得到一个循环引用错误,因此我使用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作为空对象。 所以我怀疑是

      1. 如何在表单重新加载时保持window.open的对象引用?
      2. 有没有其他方式来引用这个打开的窗口?
      3. 或者是否存在一种在表单重新加载时存储对象的通用方法?
      4. 任何指导都将深表感谢。

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

0 个答案:

没有答案