通过窗口名称访问窗口

IT技术 javascript
2021-02-22 09:11:21

如果我打开一个窗口使用

window.open('myurl.html', 'windowname', 'width=100,height=100');

如何使用“windowname”引用新窗口(来自打开它的同一页面)?这个问题是专门针对这个的。我知道我可以通过使用“var mywin = window.open(...)”来保存对句柄的引用,但在这种情况下我不在乎。

谢谢, - 戴夫

6个回答

如果您没有保存对窗口的引用,则无法恢复它。但是,如果该窗口仍处于打开状态并且如果页面加载有属于相同的域名页面,您可以运行在它的JavaScript代码:

window.open("javascript:doSomething()", "windowname");

在您的场景中这是否足够取决于您要实现的目标。

@ThiefMaster:通常问题是打开窗口导航到不同的页面,因此不可能保留参考。不过,我同意 - 这不是一个很好的解决方案。
2021-04-24 09:11:21
@ThiefMaster,我认为这是一个相当优雅的解决方案(假设它确实有效)。您对此有何异议?
2021-04-26 09:11:21
这是一个自制问题的黑客 - 至少我无法想象无法存储窗口引用的原因。您始终可以执行某些操作,例如wins['foo'] = window.open('...', 'foo');通过全局var wins访问名称到窗口对象的映射
2021-05-06 09:11:21
啊。即使那有效..我希望没有人真正使用它。但我想知道类似的东西window.open("javascript:void(window.opener.windowname = window);", "windowname")是否会起作用......这完全符合那个人的要求(不是任何人都应该实际使用这样的黑客)
2021-05-16 09:11:21

在 firefox 中(也可能在其他浏览器中工作,但现在不是我关心的问题)我能够在多个页面加载中引用一个窗口

var w = window.open("", "nameofwindow");

如果它不存在,则打开新窗口,如果存在,则返回对现有窗口的引用,而不更改窗口的内容。

使用 jQuery,我可以添加新内容,以便快速收集这样的相关链接

$('body', w.document).append(link_tag);
@Dwig 由您来定义
2021-05-04 09:11:21
什么是 nameofwindow
2021-05-08 09:11:21

彼得是正确的:

var w = window.open("", "nameofwindow");

适用于所有浏览器,我使用它来检索对先前由不同页面打开的窗口对象的引用。唯一的问题是页面的初始打开,如果弹出窗口不存在,您将获得一个带有空白页面的新窗口。

我尝试在另一个文档的上下文中调用 Javascript 函数,以检查我是否打开了新窗口或检索了已激活的页面。如果检查失败,我只需再次调用 window.open 来实际加载我的弹出内容:

var w = window.open("http://mydomain.com/myPopup", "nameofwindow");

希望有帮助。

2021-04-20 09:11:21
对上面的更正 - 它仅在调用窗口打开您尝试访问的窗口时才有效,这是问题的一部分。对不起,你是对的。
2021-05-02 09:11:21

这不可能。windowName 只是在target="..."链接/表单中使用,或者在另一个window.open调用中再次使用相同的名称以在该窗口中打开一个新的 url。

你给出了完全相同的解决方案
2021-05-07 09:11:21

尝试使用名称打开该窗口,但 URL 再次为 '',以检查它是否为空白窗口。如果它是打开的,那么你会看到窗户;如果没有,则会打开一个新窗口,您需要关闭它。在 localStorage 中添加子项将有助于防止打开新的空白窗口。

请在https://github.com/goldentom66/ParentChildWindow查看我的代码