定位到iframe的Firefox表单正在打开新选项卡

<form method="post" target="take_the_reload"> ... </form> <iframe class="hide_me" name="take_the_reload"></iframe> 

我的问题如下:

我有一个表单,需要防止刷新提交时所在的页面。 为了解决这个问题,我一直使用空的iframe作为表单的target 。 这在Chrome(v12.0.742)中完全符合预期,但在Firefox(v6.0)中失败。

在Firefox中会发生什么,在表单提交时,iframe在新标签中打开,这显然不是我想要的。

我发现了一些 相关的 post ,但没有解决我的具体情况,他们的解决scheme不起作用。

不幸的是,这项工作是在一个私有networking的专有系统,所以我不能只是简单地提供一个链接。

我也尝试使用frame而不是iframe作为相关主题的答案是以这种方式使用iframe s已被弃用。 但结果是一样的。

此外, iframe是硬编码到页面的,因为它不是用JavaScriptdynamic添加的。 最后,就像我之前所说的那样,这在Chrome中完美运行,但在Firefox中完全无法工作。 IE不是一个问题,所以任何非IE友好的解决scheme,欢迎!

这听起来很愚蠢,但是你是否尝试给iframe一个与name属性相同的id? 这似乎解决了一些与forms有关的问题。

 <form method="post" action="link/to/post/to" target="take_the_reload"> ... </form> <iframe id="take_the_reload" name="take_the_reload"></iframe> 

我不知道是否可以回答这样一个老问题,但我想我正在做这件事。

对于将来要研究这个问题的任何人来说,请注意,如果您有两个或多个定位相同iframe ID的表单,则Firefox将打开一个新选项卡,除非这两个表单具有不同的名称。 奇怪的是,这不是在Chrome中的问题。 所以,例如,这在Firefox中不起作用

 <form method="post" action="link/to/post/to" target="theiframe"> <!---input stuff here----> </form> <form method="post" action="link/to/post/to" target="theiframe"> <!---input stuff here----> </form> <iframe id="theiframe" name="theiframe"></iframe> 

但它会在Chrome中工作。 如果您希望代码在Chrome和Firefox中都能正常工作,您需要执行以下操作:

 <form name="form1" method="post" action="link/to/post/to" target="theiframe"> <!---input stuff here----> </form> <form name="form2" method="post" action="link/to/post/to" target="theiframe"> <!---input stuff here----> </form> <iframe id="theiframe" name="theiframe"></iframe> 

不知道这是否是一个错误,或Firefox是这样devise的。 我正在使用Firefox 18(截至撰写本文时的最新版本),这仍然是一个问题。

希望这可以帮助别人; 在我终于弄清楚问题出在哪里之前,我已经咬牙切齿了2个小时了。

干杯!

提示:不要在ID和名称中使用大写字母

不起作用

 <iframe id="formSubmit" name="formSubmit"> 

作品

 <iframe id="form_submit" name="form_submit"> 

对我来说这真是一个惊喜!

对于稍后可能遇到此问题的人,我通过向iframe添加名称属性来解决此问题,该iframe与iframe的id相同:

 <iframe id='iframeID' name='iframeID'></iframe> 

愚蠢的,是的,但这是Firefox的喜欢它

这可能听起来很愚蠢和奇怪,但接下来的步骤解决了我的问题(Firefox在Iframe中提交时打开新标签)

1)为“id”和“name”Iframe属性使用相同的值

2)不要在iframe的“id”或“name”属性中使用大写字母(myIframe => my_iframe)

3)检查iframe的“src”属性,当它是“about:blank”的时候它不起作用,这个属性应该被删除,就像我看到的

只是想补充,以上都没有为我工作。 我发现一个额外的原因,使其工作。 添加id已经完成了,然后实际上添加了一个src =框架,这个框架和它将要显示的页面一样。 所以我的代码是:

  <iframe id="eframe" name="eframe" src="created.php?"></iframe> 

它解决了这个问题,不再在Firefox的另一个窗口中打开!

这个问题的另一个变种:我有这个问题,“名称”/“ID”的build议没有任何区别。 我发现对我来说这似乎是一个与域有关的问题。

我在http://mypc/app/page.aspx打开了一个页面,其中有两个iframe(A和B)。

iframe A打开一个新的浏览器窗口http://localhost/app/otherpage.aspx 。 otherpage.aspx有一个表单,目标是框架B.提交表单反而打开一个新的窗口。

如果我更改iFrame A以打开新的浏览器窗口http://mypc/app/otherpage.aspx ,则从otherpage.aspx提交表单正确显示结果在iFrame B.

所以,至less在Firefox 47.0中,似乎是阻止了跨域“定位”。 IE11似乎没有任何这样的担心(至less,本地主机和实际的机器名称之间)。