【问题标题】:javascript: pop up close when page refreshjavascript:页面刷新时弹出关闭
【发布时间】:2016-12-06 13:15:15
【问题描述】:

下面是我的javascript代码。

弹出窗口正在打开,但我的页面正在刷新。现在我必须关闭弹出窗口。我正在尝试将 popupWindow 保存在 localStorage 中。但是当我通过localStorage.getItem("someVarName") 时。我没有得到原始的dom,看起来它已经改变了。 当我的页面正在刷新时,我必须保存 dom。

请建议如何做。

<script language="javascript" type="text/javascript">
  function openPopup(URL) {
    popupWindow = window.open(URL, 'popupWindow', 'height=300,width=450');
    localStorage.setItem("someVarName", popupWindow);
  }

  function closePopup() {
    var popupWindow = localStorage.getItem("someVarName");
    popupWindow.close();
  }
</script>

【问题讨论】:

  • localstorage 保存字符串而不是对象和窗口引用。
  • epascarello : 那么如何处理这种情况呢?
  • 刚刚在一两天前回答了一个非常非常相似的问题。 编辑:找到了(here),不确定这是否是重复的......

标签: javascript


【解决方案1】:

网络存储存储字符串。您不能在其中存储窗口引用。

不过,您可以存储您使用的名称并通过window.open重复使用:

function openPopup(URL) {
    window.open(URL, 'popupWindow', 'height=300,width=450');
    localStorage.setItem("someVarName", "popupWindow");
}

function closePopup() {
    var name = localStorage.getItem("someVarName");
    if (name) {
        var wnd = window.open("", name);
        wnd.close();
        localStorage.removeItem("someVarName");
    }
}

使用您的页面有权访问的现有窗口的名称调用 window.open 会为您提供对该现有窗口的引用,而不是打开新窗口。

请注意,当窗口未打开时,我是如何从存储中清除名称的,因此我们不会尝试关闭它(自相矛盾的是,这会打开它)。

我的answer to this other question 有一个完整的例子。

【讨论】:

  • 这不是打开新窗口吗?这段代码:var wnd = window.open("", name);
  • @VJS: 我的句子以 "Calling window.open with an existing window..." 应该以 "... 结尾现有的窗口,而不是打开一个新窗口"(现在它可以了 :-))。
猜你喜欢
  • 2011-08-21
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多