【问题标题】:Firefox form targeting an iframe is opening new tab针对 iframe 的 Firefox 表单正在打开新标签
【发布时间】:2011-10-28 08:09:25
【问题描述】:
<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 在新选项卡中打开,这显然不是我想要的。

我找到了somerelatedposts,但没有一个能解决我的特殊情况,而且他们的解决方案不起作用。

不幸的是,这项工作是在专用网络中的专有系统上进行的,所以我不能简单地提供一个链接。

我也尝试过使用frame 而不是iframe 作为对相关主题的回答,即不推荐使用iframes 这种方式。但结果是一样的。

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

【问题讨论】:

  • 我遇到了同样的问题,在接受的答案中提出的解决方案已经应用,因为我的控制器返回了没有内容的 HTTP-201。所以我也没有设置内容类型。只需设置内容类型即可解决问题。

标签: html forms firefox


【解决方案1】:

对于将来研究此问题的任何人,请注意,如果您有两个或多个针对相同 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 个小时。

干杯!

【讨论】:

  • 可以就任何问题发布可能的答案,无论它有多老,只要它仍然是相关且有用的信息。您在此处添加的内容绝对对遇到问题中给出的问题的人有价值,所以我 +1。
【解决方案2】:

这个问题的另一个变体:我遇到了同样的问题,“名称”/“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 和实际机器名称之间)。

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      只是想补充一下,以上都不适合我。我发现了另一个使它起作用的原因。添加 id 已完成,然后实际上将 src= 添加到与要显示的页面相同的框架中以及一个?。所以我的代码是:

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

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

      【讨论】:

      • 请提供您的答案有效的原因,以便其他人可以使用。
      【解决方案5】:

      对于以后可能遇到这个问题的人,我通过在 iframe 中添加一个 name 属性来解决它,该属性与 iframe 的 id 相同:

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

      愚蠢,是的,但那是火狐喜欢它

      【讨论】:

        【解决方案6】:

        提示:不要在 id 和 name 中使用大写字母

        没用

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

        作品

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

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

        【讨论】:

        • 太棒了! 2016 年仍然有效!
        • 到底是什么原因造成的?我在 MDN 中找不到任何相关内容。
        【解决方案7】:

        这听起来可能很愚蠢,但您是否尝试为 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>
        

        【讨论】:

        • 这就是解决方案。我讨厌错过这样的小傻事。谢谢!
        • 我今天在 Chrome 中面临同样的问题。我尝试了您的解决方案,该解决方案将 iframe id 与 iframe 的名称(与表单目标相同)相同,并且按照下面另一个答案中的建议以小写形式提供。它现在在 Firefox 中运行良好,但在 Chrome 中打开了一个新选项卡。谁能说出为什么?
        • @HasanK 这个问题可能是您特有的。以防万一,仅使用非常基本的 html 布局中的表单代码(仅 head、body 标签)对其进行测试,并查看行为是什么。如果你得到相同的结果,你应该把它作为一个单独的问题并用它发布你的 html 代码。
        • 如果您明确将其排除在外,请参考此问题。另外,试试这个下面的答案;)
        猜你喜欢
        • 2017-09-19
        • 2013-06-26
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多