我想要打开窗口,但是当用户刷新父位置或转到超链接时,我们得到了最后一个子窗口并使用此代码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')
!!
你有最好的建议吗?
答案 0 :(得分:2)
win_pop
在网页实例中运行的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