gpt4 book ai didi

javascript - 刷新后检索子窗口引用

转载 作者:太空狗 更新时间:2023-10-29 13:42:21 24 4
gpt4 key购买 nike

我有一个 HTML5 离线应用(即没有服务器端组件/代码)。

它基本上有两个窗口(父窗口和子窗口)。但是,在某些情况下,我需要以编程方式刷新父窗口。发生这种情况时,它会失去对子对象的引用,并且子对象对 window.opener 的引用不再有效。所以我的想法是我将子窗口序列化并将其存储在 localStorage 中。然后,当父级刷新时,它可以从 localStorage 获取窗口引用并仍然与子级交互。

问题是这不起作用(根据我之前在这里的问题 Stringify DOMWindow object )。我不能像任何其他对象一样序列化 DOM 窗口。

那么我怎样才能让我新刷新的窗口获取对其前任的 child 的引用呢?

编辑:强调这是一款离线应用。没有服务器端组件。

我还应该补充一点,我需要刷新父级的原因是为了检查应用程序更新(缓存 list 中的更改)。由于父级是应用程序中加载的第一个页面,它基本上管理缓存(事实上,在 Safari 中,如果在任何缓存过程中关闭此窗口,整个浏览器就会崩溃)。所以“父”本质上是“用户加载的第一页”。 这意味着我不能在框架中包含“父级”,因为最顶层的窗口随后会管理缓存,并需要刷新才能查找更新。 实际上,看起来我可以使用 frame 方法,因为刷新应用程序中的任何页面都会触发更新检查。虽然很麻烦。

最佳答案

您可以通过以下技巧简单地获取子窗口的引用。

newWin = window.open("", "child_window_name", "width=...");
if (newWin.location.href === "about:blank") {
newWin = window.open("a.html", "child_window_name", "width=...");
} else {
// We've already obtained the reference.
// However, IE and FireFox won't put focus on an already opened window.
// So we have to do that explicitly:
newWin.focus();
}

请注意,您必须有一个固定的子窗口名称才能使这个技巧起作用。

示例网址: http://josephj.com/lab/2011/window-open-reconnect/demo.html

关于javascript - 刷新后检索子窗口引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4080421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com