の JavaScript<iframe>
では、親ウィンドウで関数を呼び出す必要があります。両方のウィンドウが同じドメインからのものです。
安全に使用できwindow.parent.myFunction();
ますか?
の JavaScript<iframe>
では、親ウィンドウで関数を呼び出す必要があります。両方のウィンドウが同じドメインからのものです。
安全に使用できwindow.parent.myFunction();
ますか?
window.parent
はい、同一ドメインからご利用いただけます。
WhatWG 仕様の第6 章: Web ページの読み込みには、次のように書かれています。
iframe.parent
存在するiframe.parent
iframe
の親のDOM へのプロキシです心に留めながら、仕様を読むことでこの結論に到達する方法をお見せしようとしています。parent
iframe
はじめましょう。長文です。
parent
WhatWG#dom-parentについてwindow.parent
:
ブラウジング コンテキスト b 内のa
Window
のオブジェクトの親 IDL 属性は、親ブラウジング コンテキストが存在する場合 (つまり、bが子ブラウジング コンテキストの場合)、またはブラウジング コンテキストb自体のオブジェクトを返す必要があります。 (つまり、トップレベルのブラウジング コンテキストまたは切り離されたネストされたブラウジング コンテキストである場合)。Document
WindowProxy
WindowProxy
parent
親ウィンドウの DOM などにアクセスするための属性です。でも:
WindowProxy
ますか?読み続けましょう。
ブラウジング コンテキストは、Document
オブジェクトがユーザーに表示される環境です。
WhatWG#Browsing contextには次のように書かれています:
通常、Web ブラウザーのタブまたはウィンドウには、フレームセット内の iframe やフレームと同様に、ブラウジング コンテキストが含まれています。各ブラウジング コンテキストには、対応する WindowProxy オブジェクトがあります。
ウィンドウ プロキシは、オブジェクトをプロキシしwindow
、セキュリティ制約などを実施するためのオブジェクトです。1 つのwindow
オブジェクトに対して複数のプロキシが存在する場合があります (たとえばiframes
、2 つの異なるドメインから 2 つが同じ親にアクセスする場合など)。
WindowProxy オブジェクトを使用すると、各ブラウジング コンテキストに単一の Window オブジェクトがあるかのようにスクリプトを動作させることができますが、ドキュメントごとに個別の Window オブジェクトを保持できます。
私たちは、ほぼ、そこにいる。読み続けます。
次の条件のいずれかが true の場合、ブラウジング コンテキスト A は 2 番目のブラウジング コンテキスト B をナビゲートできます。
- A のアクティブ ドキュメントの起点が B のアクティブ ドキュメントの起点と同じである、または
- ブラウジング コンテキスト A は、トップレベルのブラウジング コンテキストを持つネストされたブラウジング コンテキストであり、そのトップレベルのブラウジング コンテキストは B です。
- ブラウジング コンテキスト B は補助的なブラウジング コンテキストであり、A は B のオープナー ブラウジング コンテキストをナビゲートすることが許可されています。
- ブラウジング コンテキスト B はトップレベルのブラウジング コンテキストではありませんが、A のアクティブなドキュメントと同じ起点を持つアクティブなドキュメントを持つ B の祖先ブラウジング コンテキストが存在します (実際には A 自体である可能性があります)。
両方が同じドメインからのものである場合、 はiframe
その から機能にアクセスできますか? parent
推測しましょう。
parent
window
親のオブジェクトではなく、 WindowProxy
.iframe
その親にアクセスできます。これは、両者が同じオリジンを持っているためです (上記の最初のセキュリティ条件を参照)。ご覧のとおり: 仕様を注意深く読めば、ブラウザーがどのように振る舞うべきかという答えを見つけることができます。仕様を読むことは後天的なスキルです。忍耐と正確さが必要です。
しかし、世界はそれほど素晴らしいものではありません。仕様を適切に実装していないブラウザがあります。emptorに注意してください。