web-dev-qa-db-ja.com

postmessageを使用してiframeの親ドキュメントを更新する

親ページとして別のサブドメインのフォームを含むiframeを開くgreasemonkeyスクリプトがあります。

フォーム送信後にiframeが更新されたときに親ページを更新したい

iframeが更新されたときに関数を実行できるようになりましたが、その関数を親ドキュメントに影響を与えることができません。

これはブラウザのセキュリティモデルによるものだと理解しており、postMessageを使用して2つのウィンドウ間で通信する方法を読んでいますが、親にリロード呼び出しを送信する方法がわかりません。

それを行う方法についてのアドバイスは非常に役立ちます

ありがとう

22
aperture

使用する:

window.parent.postMessage('Hello Parent Frame!', '*');

「*」は「任意のオリジン」を示すことに注意してください。可能であれば、これをターゲットのオリジンに置き換える必要があります。

親フレームでは、次のものが必要です。

window.addEventListener('message', receiveMessage, false);

function receiveMessage(evt)
{
  if (evt.Origin === 'http://my.iframe.org')
  {
    alert("got message: "+evt.data);
  }
}

「my.iframe.org」をiFrameのオリジンに置き換えます。 (オリジンの検証はスキップできます。取得したデータの処理には十分注意してください)。

57
Scott Wilson