web-dev-qa-db-ja.com

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が新しいタブで開かれることです。これは明らかに私が望んでいることではありません。

私は somerelatedposts を見つけましたが、私の特定の状況に対処するものはなく、それらのソリューションは機能しません。

残念ながら、この作業はプライベートネットワークの専用システム上で行われるため、単純にリンクを提供することはできません。

frameではなくiframeを使用してみましたが、iframeを使用することは推奨されていません。しかし、結果は同じです。

また、iframeは、JavaScriptで動的に追加されないという意味で、ページにハードコードされています。最後に、前に述べたように、これはChromeでは問題なく動作しますが、Firefoxではまったく動作しません。 IEは問題ではないため、IEに適さないソリューションは大歓迎です!

43
ssell

これはばかげて聞こえるかもしれませんが、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>
81
sg3s

今後これを検討する人のために、同じiframe IDをターゲットとする2つ以上のフォームがある場合、2つのフォームの名前が異なる場合を除き、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時間歯を食いしばっていました。

乾杯!

10
Charles

ヒント:IDと名前に大文字を使用しないでください

動かない

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

作品

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

それは私にとって驚きでした!

8
Pawello

この問題に後で遭遇する可能性がある人のために、iframeのIDと同じ名前属性をiframeに追加することで解決しました。

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

バカ、はい、でもFirefoxはそれが好きです

4
Luke Madhanga

ばかげて奇妙に聞こえるかもしれませんが、次のステップで問題が解決しました(FirefoxがIframeで送信すると新しいタブが開きました)

1)「id」と「name」のiframe属性に同じ値を使用する

2)Iframeの「id」または「name」属性に大文字を使用しないでください(myIframe => my_iframe)

3)Iframeの「src」属性を確認します。「about:blank」の場合は機能しませんでした。この属性は、私が見るように削除する必要があります

1
Artem Chernovol

追加したいだけですが、上記のどれも私にとってうまくいきませんでした。私はそれを機能させる追加の理由を見つけました。 IDの追加が行われ、実際に、src =が?とともに表示されるページと同じフレームに追加されます。だから私のコードは:

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

これで問題が解決し、Firefoxの別のウィンドウで開かなくなりました!

0

この問題の別のバリエーション:私はこれと同じ問題を抱えていて、 "name"/"id"の提案は何の違いもありませんでした。私にとっては、ドメイン関連の問題であるように見えました。

http://mypc/app/page.aspx に2つの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と実際のマシン名の間)。

0
Loophole