我有一个在我的域中的 iframe,这个 iframe 有一个文件叫做iframe.js
。
我的父级文档有一个文件叫做parent.js
。
我需要从iframe.js
中的一个函数调用在parent.js
中的函数。
我尝试使用window.parent.myfunction()
,这个函数在parent.js
文件中。但是它没有起作用。只有当我将这个函数放在父页面上(我的意思是在HTML中),然后它才起作用了。
有什么办法可以让它起作用吗?
我有一个在我的域中的 iframe,这个 iframe 有一个文件叫做iframe.js
。
我的父级文档有一个文件叫做parent.js
。
我需要从iframe.js
中的一个函数调用在parent.js
中的函数。
我尝试使用window.parent.myfunction()
,这个函数在parent.js
文件中。但是它没有起作用。只有当我将这个函数放在父页面上(我的意思是在HTML中),然后它才起作用了。
有什么办法可以让它起作用吗?
尝试使用 parent.myfunction()
。同时确保在您的父文档中已包含 parent.js
。
我知道这是一个老问题,但如果被接受的答案不起作用(对我没用),你可以在 parent.js 中执行此操作。
window.myfunction = function () {
alert("I was called from a child iframe");
}
现在你可以像最初想的那样,从iframe中调用myfunction()
window.parent.myfunction();
Window.postMessage()
方法可以安全地启用 跨域
通信。
如果您可以访问父页面,则可以传递任何数据,以及直接从 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.'
}, "*");
参考资料: