【问题标题】:Access a window by window name按窗口名称访问窗口
【发布时间】:2011-11-06 19:44:15
【问题描述】:

如果我使用

打开一个窗口
window.open('myurl.html', 'windowname', 'width=100,height=100');

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

谢谢,- 戴夫

【问题讨论】:

  • 将window.open()的返回值赋值给一个变量。这是唯一合适的解决方案。
  • -1 表示没有阅读 Daves 的问题。 var mywin=window.open() 正是 Dave 不在乎的。
  • 我不确定我是否理解这个问题......你是说你想要一种方法来引用你从开启器打开的窗口,但然后说你不关心如何去做?
  • @Dave:接受的答案完全不正确,请参阅Petr's answer。

标签: javascript


【解决方案1】:

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

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

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

【讨论】:

  • 呃。即使那行得通..我希望没有人真正使用它。但我想知道像window.open("javascript:void(window.opener.windowname = window);", "windowname") 这样的东西是否会起作用......这完全符合这个家伙的要求(不是任何人都应该真正使用这样的黑客)
  • @ThiefMaster,我认为这是一个相当优雅的解决方案(假设它确实有效)。你到底反对什么?
  • 这是一个自制问题的破解 - 至少我无法想象无法存储窗口引用的原因。您始终可以执行类似 wins['foo'] = window.open('...', 'foo'); 的操作,让您通过全局 var wins 访问名称到窗口对象的映射`
  • @ThiefMaster:通常问题是打开的窗口导航到不同的页面,因此不可能保留参考。不过,我同意 - 这不是一个很好的解决方案。
【解决方案2】:

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

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

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

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

$('body', w.document).append(link_tag);

【讨论】:

  • 什么是nameofwindow
  • @Dwigh 由你来定义
【解决方案3】:

Petr 是正确的:

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

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

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

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

希望对您有所帮助。

【讨论】:

【解决方案4】:

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

【讨论】:

  • 你给出了完全相同的解决方案
【解决方案5】:

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

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

【讨论】:

    【解决方案6】:

    抱歉,我发帖迟了,但如果您仍然打开另一个窗口,并且它们在同一个域中,您可以在第一个窗口上运行:

    function getReference(w) {
       console.log('Hello from', w);
    }
    

    在第二个窗口上:

    window.opener.getReference(window);
    

    【讨论】:

      【解决方案7】:

      afaik 没有像 windows['windowname'] 这样的方式。 在 window.open() 中分配的“windowname”可以作为<a target="windowname" [...] >中的目标来寻址

      【讨论】:

      • 这不应该是答案。请参阅问题 cmets 中 Jack Allan 的链接。
      猜你喜欢
      • 2013-03-21
      • 2023-04-06
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多