我有一个表单在提交时打开一个新窗口:
<form id="form-id" target="_blank">
我想通过 javascript 访问新创建的窗口,无需手动生成目标的唯一名称,也无需采用其他方法来打开窗口。
似乎必须有一种简单的方法来做到这一点,但我找不到适合我的具体情况的方法。
我不是 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
}
您可以使用名称来代替
_blank
为新窗口命名。
<form id="form-id" target="newName">
然后你可以在 JS 中使用它:
var newWindow = window.open(null, 'newName');
添加@Pointy接受的答案:
到 2023 年,至少在 Chrome 中,当通过
<form target="_blank">
打开窗口时,window.opener
在新窗口中未定义。
我必须将
rel="opener"
添加到打开表单中,之后,window.opener
被定义并且可以按照接受的答案的建议使用。
<form ... target="_blank" rel="opener">