(私のドメインに)iframeがあり、そのiframeにはファイル_iframe.js
_があります。
親ドキュメントには_parent.js
_というファイルがあります。
_parent.js
_にある関数から、_iframe.js
_にある関数を呼び出す必要があります。
window.parent.myfunction()
この関数は_parent.js
_ファイルにあります。
しかし、うまくいきませんでした。親ページに関数を配置した場合にのみ(HTMLの場合)、機能しました。
これを機能させる方法はありますか?
parent.myfunction()
だけを試してください。また、parent.jsが親ドキュメントに含まれていることを100%確認してください。
これは古い質問ですが、受け入れられた答えが機能しない場合(私にとっては機能しませんでした)、parent.js内でこれを行うことができます
window.myfunction = function () {
alert("I was called from a child iframe");
}
Iframeからmyfunction()を呼び出すことができます
window.parent.myfunction();
Window.postMessage()
メソッドは安全にcross-Origin
コミュニケーション。
親ページにアクセスできる場合は、Iframe
から親メソッドを直接呼び出すだけでなく、すべてのデータを渡すことができます。
親ページ:
if (window.addEventListener) {
window.addEventListener("message", onMessage, false);
} else if (window.attachEvent) {
window.attachEvent("onmessage", onMessage, false);
}
function onMessage(event) {
// Check sender Origin to be trusted
if (event.Origin !== "http://example.com") return;
var data = event.data;
if (typeof(window[data.func]) == "function") {
window[data.func].call(null, data.message);
}
}
// Function to be called from iframe
function parentFuncName(message) {
alert(message);
}
Iframeコード:
window.parent.postMessage({
'func': 'parentFuncName',
'message': 'Message text from iframe.'
}, "*");
参照: