の内側に指定されているときは、このようなHTML
ありますフォームターゲット休憩グローバル変数名はIFRAME
<form action="frame.html" target="frame1"><input type="submit"></form>
<iframe name="frame1" id="frame1" src="frame.html"></iframe>
をそして、それは(製品コードの場合、いくつかのポストデータを送信する)フレームをリロード正常に動作します。しかしframe.htmlにグローバル変数「name」を定義するコード、コードブレークがあり、代わりに新しいタブにframe.htmlを開いた場合。
var name = "a";
はクロームとFirefoxので同じように動作します。
はここgithub.ioに例を示します http://evigl.github.io/form-target-iframe-test/
出典:https://github.com/EviGL/form-target-iframe-test/tree/gh-pages
(最初のフレームは、通常の作業枠で、2番目の新しいウィンドウで明確にするため、いくつかにconsole.log年代を開きます)。
これは変ですね。 frame.htmlが別のドメインにある場合でも同じように動作します。それは同じ原産地政策を破ることはありませんか?
この動作を無効にする方法はありますか?私はフレームの中にいくつかの制御されていないコードを持っています(ユーザーが生成したコードのプレビュー)、それを変更することはオプションではありません。また、別のドメインにもあります。
_No。 JSは原点を越えて何も読んでいません._ しかし、いくつかのドメインで変数 "name"の値をブルートフォースすることができます(同時に数十万のタブを開く)。フレームがリロードされたか、新しいウィンドウが開かれたかどうかをJSで判断する方法があると思います。 iframeを再作成すると、その仕事ができます。私は答えを受け入れるでしょう。 – EviGL
もう1つの回避策は、グローバルにしないでください。関数でアクセス可能にする。 – SaidbakR
@sємsєм - 質問は、 "フレーム内のある制御されていないコード(ユーザーが生成したコードのプレビュー)を変更することはオプションではありません" – Quentin