html-针对iframe的Firefox表单正在打开新标签

<form method="post" target="take_the_reload">

    ...

</form>


<iframe class="hide_me" name="take_the_reload"></iframe>

我的问题如下:

我有一个需要阻止的表单在提交时刷新它所在的页面。 为解决此问题,我一直在使用一个空的iframe作为表单的iframe。 该功能完全可以在Chrome(v12.0.742)中按预期方式工作,但在Firefox(v6.0)中无法正常工作。

在Firefox中发生的事情是,在提交表单后,iframe在新选项卡中打开,这显然不是我想要的。

我发现了一些相关的帖子,但是都没有解决我的特殊情况,因此他们的解决方案不起作用。

不幸的是,这项工作是在专用网络中的专有系统上进行的,因此我不能仅仅提供一个链接。

我还尝试过使用iframe(而不是iframe)作为相关主题的答案,因为不赞成以这种方式使用iframes。 但是结果是相同的。

同样,iframe并不是在JavaScript中动态添加的,而是被硬编码到页面中。 最后,就像我之前说的那样,这在Chrome浏览器中可以完美运行,但在Firefox中根本无法运行。 IE不是问题,因此欢迎任何非IE友好的解决方案!

ssell asked 2020-08-12T02:29:55Z
7个解决方案
80 votes

这听起来可能很愚蠢,但是您是否尝试为iframe提供与name属性相同的id? 这似乎解决了一些与表格有关的问题。

<form method="post" action="link/to/post/to" target="take_the_reload">

    ...

</form>

<iframe id="take_the_reload" name="take_the_reload"></iframe>
sg3s answered 2020-08-12T02:30:05Z
10 votes

对于以后研究此内容的任何人,请注意,如果您有两个或多个针对相同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是按照这种方式设计的。 我正在使用Firefox 18(撰写本文时为最新版本),但这仍然是一个问题。

希望这对别人有帮助; 在这之前,我一直咬着牙大约2个小时,直到我终于弄清楚问题出在哪里。

干杯!

Charles answered 2020-08-12T02:30:44Z
8 votes

提示:请勿在ID和名称中使用大写字母

不起作用

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

作品

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

对我来说真是一个惊喜!

Pawello answered 2020-08-12T02:31:16Z
4 votes

对于以后可能遇到此问题的用户,我通过向iframe中添加与iframe的ID相同的name属性来解决它:

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

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

Luke Madhanga answered 2020-08-12T02:31:41Z
1 votes

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

1)对“ id”和“ name” iframe属性使用相同的值

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

3)检查Iframe的“ src”属性,当它为“关于:空白”时,它对我不起作用,该属性应按我的见解删除

Artem Chernovol answered 2020-08-12T02:32:18Z
0 votes

只是想补充一点,以上都不对我有用。 我发现了使其起作用的其他原因。 添加完id后,实际上将src =添加到与要显示的页面相同的框架以及?。 所以我的代码是:

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

解决了该问题,不再在firefox的另一个窗口中打开!

GarfieldTheGreat answered 2020-08-12T02:32:42Z
0 votes

这个问题的另一个变化:我遇到了同样的问题,“ name” /“ id”的建议没有任何区别。 我发现对我来说,这似乎是一个与域相关的问题。

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

iframe A在[http://localhost/app/otherpage.aspx]中打开一个新的浏览器窗口。otherpage.aspx具有针对iFrame B的形式。提交表单将打开一个新窗口。

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

因此,至少在Firefox 47.0中,它似乎阻止了跨域“定位”。 IE11似乎没有任何此类担忧(至少在localhost和实际的计算机名称之间)。

Loophole answered 2020-08-12T02:34:02Z
translate from https://stackoverflow.com:/questions/7083325/firefox-form-targeting-an-iframe-is-opening-new-tab