从iframe内部调用父Javascript函数

时间:2011-08-03 16:37:56

标签: javascript jquery iframe parent

我有一个iframe(在我的域中),iframe有一个文件iframe.js

我的父文档有一个文件parent.js

我需要从parent.js中的函数调用iframe.js中的函数。

我尝试window.parent.myfunction()此功能位于parent.js文件中。

但是,它没有用。只有当我把这个函数放在父页面上时(我的意思是在HTML中),它才有效。

知道如何让它发挥作用吗?

3 个答案:

答案 0 :(得分:60)

尝试parent.myfunction()。还要100%确定parent.js包含在父文档中。

答案 1 :(得分:27)

我知道这是一个老问题,但如果接受的答案不起作用(它对我不起作用),你可以在parent.js中做到这一点

window.myfunction = function () {
   alert("I was called from a child iframe");
}

现在从iframe你可以像你最初想要的那样调用 myfunction()

window.parent.myfunction(); 

答案 2 :(得分:9)

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.'
}, "*");

<强>参考文献: