web-dev-qa-db-ja.com

iframeから親ウィンドウに変数を設定します

Iframeが埋め込まれた親ドキュメントがあります。 iframe内にアップロードフィールドがあります。ユーザーがアップロードするファイルを選択したら、jQuery変更イベントをトリガーします。そのイベントで、親ウィンドウで変数をtrueに設定して、アップロードが開始されたことを親が認識できるようにします。

誰もこれを行う方法を知っていますか?

これを試していましたが、機能しませんでした:

var test;
$("#newsletter_email").change(function() {
  parent.window.test = true;

});

$('#send').click(function() {
    if (test) {
        alert('File has been uploaded!');
    } else {
        alert('You need to upload a file');
    }
});
44
Nic Hubbard

グローバルスコープ内の変数は、それらを含むwindowオブジェクトのDOMプロパティとして自動的に公開されます。

この意味は

var foo = 'bar';

に似ています

window.foo = 'bar';

つまり、参照を取得できるanywindowオブジェクトのグローバルスコープを読み取ることができます。ここで暗示できるのは、windowの使用が暗黙であることです。 「window。」と明示的に入力しなくても、とにかくそこにあります。

また、フレーム自体は()現在のwindowオブジェクトのDOMプロパティとして自動露出されるため、他のフレームのwindowオブジェクトにもアクセスできることを意味します。

parentオブジェクトのwindowプロパティは、そのウィンドウの親(存在する場合)のwindowオブジェクトへの参照を保持します。 iframeには必ず親ウィンドウがあるため、ここで入力したものはすべてこれに要約されます

// set the global variable 'foo' in the parent global scope
parent.foo = 'bar';
85
Peter Bailey

メインドキュメントとiframeの両方が同じドメインを共有している場合、localStorageに保存して読み書きすることもできます。

3
Marta