在表单提交时获得对 _blank 目标窗口的引用
Posted
技术标签:
【中文标题】在表单提交时获得对 _blank 目标窗口的引用【英文标题】:obtain reference to _blank target window on form submit 【发布时间】:2012-11-14 05:17:45 【问题描述】:我有一个在提交时打开一个新窗口的表单:
<form id="form-id" target="_blank">
我想通过 javascript 访问新创建的窗口,无需手动为目标生成唯一名称,也无需使用其他打开窗口的方法。
似乎必须有一种简单的方法来做到这一点,但我无法找到适合我特定情况的方法。
【问题讨论】:
为什么有人会否决这个问题?至少评论会有所帮助。不要以为我没有调查过这个;并且仅仅因为您不了解导致问题的情况,这并不能反映提出问题的合理性。 【参考方案1】:我不能 100% 确定这适用于所有浏览器,但是当 target
上的 target
属性在 <a>
或 <form>
上导致新窗口打开时,Firefox 似乎设置了 window.opener
。因此,您可以从另一个方向找到新窗口中的原始窗口(假设您控制那里的代码;如果不是,那么我无法想象您可以对窗口引用做很多事情)。
当然,新窗口中的代码可以做的事情之一是在旧窗口中调用一个函数,并传入它自己的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
【讨论】:
谢谢你!这是解决这个问题的一种非常有趣的方法。 @jtrick 不客气!就像我说的,我不确定这是否得到广泛支持。然而,它可能是,因为opener
的东西真的很旧。在我为您的问题尝试之前,我不知道带有“目标”的链接/表单会设置它:-)
这似乎是处理这种情况的最佳方式。看起来虽然 window.opener 不是官方规范的一部分,但它受到所有主流浏览器的支持并且不太可能消失......developer.mozilla.org/en-US/docs/DOM/window.opener【参考方案2】:
代替_blank
,您可以使用命名您的新窗口。
<form id="form-id" target="newName">
然后你可以在 JS 中使用它:
var newWindow = window.open(null, 'newName');
【讨论】:
谢谢尼尔,但正如我在问题中提到的那样,对于特定情况,我必须使用 target="_blank",理想情况下“无需手动为目标生成唯一名称,也无需求助于替代方案打开窗口的方法。” 三个人对这个答案投了赞成票,尽管我在问题中已经明确说了,并且在这里发表了评论?在正常情况下,我会同意这将是最好的方法,这就是为什么我在寻求帮助时特别排除了它的原因。我想做的事可以做吗?谢谢。 @Pointy 谢谢你的幽默,当我读到你的评论时,我真的笑出了声。以上是关于在表单提交时获得对 _blank 目标窗口的引用的主要内容,如果未能解决你的问题,请参考以下文章
html中target四种选择_blank_parent_self_top,分别是什么意思?
html中target四种选择_blank_parent_self_top,分别是什么意思?