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

jtr*_*ick 6 javascript forms dom target

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

<form id="form-id" target="_blank">
Run Code Online (Sandbox Code Playgroud)

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

似乎必须有一个简单的方法来做到这一点,但我找不到一个能在我的具体情况下工作的方法.

Nea*_*eal 5

相反,_blank您可以使用新窗口的名称。

 <form id="form-id" target="newName">
Run Code Online (Sandbox Code Playgroud)

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

var newWindow = window.open(null, 'newName');
Run Code Online (Sandbox Code Playgroud)


Poi*_*nty 5

我不能 100% 确定这在所有浏览器中都有效,但 Firefox 似乎会在或上的属性导致打开新窗口window.opener时进行设置。因此,您可以走另一个方向并从新窗口中找到原始窗口(假设您控制那里的代码;如果没有,那么我无法想象您无论如何都可以对窗口引用做很多事情)。target<a><form>

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

因此,具体来说,如果您有:

<form action=whatever target=_blank>
Run Code Online (Sandbox Code Playgroud)

在原始页面上,那么最终在新打开的窗口中的页面可以执行以下操作:

<head>
  <script>
    if (window.opener) {
      window.opener.announceWindow( window );
    }
  </script>
Run Code Online (Sandbox Code Playgroud)

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

function announceWindow( win ) {
  // do stuff with "win", a newly-opened window
}
Run Code Online (Sandbox Code Playgroud)