【问题标题】:Javascript to refresh parent does not work with another script present刷新父级的 Javascript 不适用于存在的另一个脚本
【发布时间】:2016-11-21 03:33:54
【问题描述】:

我正在使用以下脚本从弹出窗口中自动刷新父窗口。

window.onunload = refreshParent;
function refreshParent() {
    window.opener.location.reload();
}
</script>

当我手动关闭窗口时,脚本运行良好。问题是当我使用以下脚本自动关闭弹出窗口时。

<script>var daddy = window.self; 
daddy.opener = window.self;
daddy.close();</script>

如果我手动关闭窗口,父页面会刷新并且一切正常。但是,如果我添加第二个脚本来自动关闭弹出窗口,父页面不会刷新,但弹出窗口会关闭。我尝试将第一个脚本更改为 body.onload 和 window.onload,但都不起作用。我怎样才能让这两个脚本一起工作,或者以其他方式解决问题?

【问题讨论】:

  • daddy.opener = window.self; 你不能分配给 window.opener (这是你的代码试图做的)......该代码基本上是...... window.opener = window; window.close();
  • 两个脚本都可以独立工作。
  • 是的,但是关闭窗口的三行代码可以简单地使用window.close() - 你已经找到了真正的问题,onunload 并不总是在窗口关闭时运行 - 试试@ 987654326@ 避免超时黑客攻击

标签: javascript


【解决方案1】:

因为这个代码它不能工作

var daddy = window.self; 
daddy.opener = window.self;

当你这样做时,你试图重新设置 window.opener(到弹出窗口),所以你最终调用

window.opener.location.reload();

不会在开启程序中调用reload,而是在弹出窗口中重新加载。

那么,为什么不干呢

<script>close();</script>

在弹出窗口中?

【讨论】:

  • 单独运行时,脚本正确刷新了父页面。只有当我使用脚本关闭自身时才会出现问题。两个脚本都可以单独运行。
【解决方案2】:

这不是很漂亮,但我找到了解决方案。当我添加脚本以自动关闭子项时,似乎要刷新的脚本没有时间运行。我在两个脚本之间添加了 1 秒的延迟,一切正常。

上面一位用户提供了一个更有说服力的解决方案。 onbeforeunload 以更好的方式解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2012-08-13
    相关资源
    最近更新 更多