Javascript:刷新父窗口时获取当前window.open()

时间:2017-11-27 11:00:09

标签: javascript

我想要打开窗口,但是当用户刷新父位置或转到超链接时,我们得到了最后一个子窗口并使用此代码win_pop.location.replace('http://example.com')

例如:

var win_pop = window.open(url, 'lastWin', 'width=300px,height=200px,top=1200px,left=2000px');

为什么在刷新父位置子窗口后无效。在任何刷新或转到父页面中的超链接之前运行良好。

win_pop.location.replace('http://example.com') !!

你有最好的建议吗?

2 个答案:

答案 0 :(得分:2)

  1. 您加载页面
  2. 您为名为win_pop
  3. 的变量分配值
  4. 您加载新页面
  5. 在网页实例中运行的JavaScript程序的生命周期只与该网页实例存在一样长。

    如果您有新页面,则会有一个新的JS环境,旧数据将丢失。

    win_pop不再包含您分配给它的值。

    您可以在页面之间存储数据(例如通过本地存储),但这仅适用于简单对象,数组和基元。

    无法保留对新窗口的引用。

    实现这种效果的唯一方法是避免重新加载原始页面。例如,通过执行所有导航到"新页面"通过使用Ajax并使用pushState和朋友操纵历史记录。

答案 1 :(得分:1)

@Quentin对你的js变量会发生什么是正确的,但他似乎忘记了一件小事:

您可以使用postMessage API和MessageEvent.source属性,该属性将指向您的弹出窗口。

因此,您可以在弹出窗口上启动循环,该循环将每隔n秒向window.opener发送一条消息。

setInterval(function(){
  window.opener.postMessage('foo', '*');
}, delay);

然后在您的所有网页中,您将收听message事件,并将popup变量设置为您刚刚检索到的MessageEvent.source

onmessage = function(evt){
  popup = evt.source;
};

瞧!

这是a plnkr