Chromeでいくつかの実験を行いましたが、確認が必要なのでわかりません:フレームとiframeは分離されたjavascriptコンテキストを持っていますか?
iframeとフレームに別々のJavaScriptコンテキストがあり、それらのフレーム間で変数を共有できないという点を修正しました/ iframe?
簡単にするために、のは、クライアントは常にクロムの同じバージョンになると仮定しましょう
Chromeでいくつかの実験を行いましたが、確認が必要なのでわかりません:フレームとiframeは分離されたjavascriptコンテキストを持っていますか?
iframeとフレームに別々のJavaScriptコンテキストがあり、それらのフレーム間で変数を共有できないという点を修正しました/ iframe?
簡単にするために、のは、クライアントは常にクロムの同じバージョンになると仮定しましょう
はい(それは私の場合です)。
ただし、frames
コレクションまたはparent
を使用して、他のフレームにアクセスすることができます(同じドメインのものと仮定します)。
コンテキストの分離はフレーム間ではなく、ドメイン間で行われます。つまり、ドメインAでフレームAをロードし、ドメインBでフレームBをロードすると、フレームAのjavascriptはドメインBのコンテキストにアクセスできなくなります。詳細な説明はthisをチェックしてください。
編集:もちろん、同じドメインにいる場合は、SLaksの回答が完全に適用されます。
フレーム間で値を共有することは不可能ではありませんが、注意する必要があります。 Internet Explorerで、次のシナリオは、エラーになります:
から保存されたオブジェクトを参照しようとしデフンtページが参照されます。
さて、それらはちょうど異なるグローバルオブジェクトとグローバルスコープを持っています。ただし、同じドメインにある場合は、コードを別のドメインから実行できます。しかし、あなたは(親ウィンドウ内で)これを実行した場合:
のiframeのグローバルスコープ内のグローバル変数globalArray
を作成
document.getElementById("myiframe").contentWindow.window.globalArray = [];
。
とArray
は、IFRAMEのArray
コンストラクタを参照しているため、その後のiframe内
console.log(globalArray instanceof Array);
はfalse
を返します。
console.log(globalArray instanceof top.Array);
ここで、top
は、コンテナウィンドウのグローバルオブジェクトを参照しています。
jsfiddle:http://jsfiddle.net/EFbtN/
答えが「イエス」であるが、それは「シェア変数」には不可能ではありません。ただし、Internet ExplorerはJavaScriptオブジェクトの系統について非常に厄介なので、危険です。 – Pointy
あなたはコメントの代わりに答えを出すべきです;)また、クライアントが常にChromeであると仮定しましょう。 – Klaim
回答が準備完了です。私はChromeがIEのような感度を持っているとは思っていませんが、私は100%確実ではありません。テストするのは簡単でしょう。 – Pointy