在表单提交时获取对_blank目标窗口的引用

问题描述 投票:0回答:3

我有一个表单在提交时打开一个新窗口:

<form id="form-id" target="_blank">

我想通过 javascript 访问新创建的窗口,无需手动生成目标的唯一名称,也无需采用其他方法来打开窗口

似乎必须有一种简单的方法来做到这一点,但我找不到适合我的具体情况的方法。

javascript forms dom target
3个回答
5
投票

我不是 100% 确定这适用于所有浏览器,但当

window.opener
target
上的
<a>
属性导致打开新窗口时,Firefox 似乎会设置
<form>
。因此,您可以走另一个方向,从新窗口中找到原始窗口(假设您控制那里的代码;如果没有,那么我无法想象您可以对窗口引用做很多事情)。

当然,新窗口中的代码可以做的事情之一就是调用旧窗口中的函数,并传入其自己的

window
引用。

因此,具体而言,如果您有:

<form action=whatever target=_blank>

在原来的页面上,那么新打开的窗口中最终出现的页面可以这样做:

<head>
  <script>
    if (window.opener) {
      window.opener.announceWindow( window );
    }
  </script>

假设

announceWindow()
是原始页面上的一个函数,可能类似于:

function announceWindow( win ) {
  // do stuff with "win", a newly-opened window
}

5
投票

您可以使用名称来代替

_blank
为新窗口命名。

 <form id="form-id" target="newName">

然后你可以在 JS 中使用它:

var newWindow = window.open(null, 'newName');

0
投票

添加@Pointy接受的答案:

到 2023 年,至少在 Chrome 中,当通过

<form target="_blank">
打开窗口时,
window.opener
在新窗口中未定义。

我必须将

rel="opener"
添加到打开表单中,之后,
window.opener
被定义并且可以按照接受的答案的建议使用。

<form ... target="_blank" rel="opener">
© www.soinside.com 2019 - 2024. All rights reserved.