在另一个图层上调用另一个iframe中的函数

时间:2012-03-16 12:14:21

标签: javascript iframe

我试图从另一个帧调用一个函数。但是,当我使用“document.getElementById(frame_id))”时,找不到它。

我检查了文档的innerHTML输出是什么,我需要定位的iframe是另一个iframe中的1层。

在主要的iframe我使用: document.getElementById('player'))但它返回:null

我需要在“菜单”iframe中找到“播放器”iframe。

这是“主要”iframes头部的代码:

function callPlayer(frame_id, func, args){
    if(!frame_id) return;
    if(frame_id.id) frame_id = frame_id.id;
    else if(typeof jQuery != "undefined" && frame_id instanceof jQuery && frame_id.length) frame_id = frame_id.get(0).id;
    if(!document.getElementById(frame_id)) return;
    args = args || [];

    /*Searches the document for the IFRAME with id=frame_id*/
    var all_iframes = document.getElementsByTagName("iframe");
    for(var i=0, len=all_iframes.length; i<len; i++){
        if(all_iframes[i].id == frame_id || all_iframes[i].parentNode.id == frame_id){
           /*The index of the IFRAME element equals the index of the iframe in
             the frames object (<frame> . */
           window.frames[i].postMessage(JSON.stringify({
                "event": "command",
                "func": func,
                "args": args,
                "id": frame_id
            }), "*");
        }
    }
}

function switchState()
{
    callPlayer('player', 'stopVideo');
}

希望有人理解我的描述..

the HTML in Firebug

2 个答案:

答案 0 :(得分:1)

您可以使用

window.parent.document.getElementById("player").contentWindow

从“主”iframe中定位“玩家”iframe的窗口对象,并在那里调用其函数。

例如:

window.parent.document.getElementById("player").contentWindow.player_func();

答案 1 :(得分:0)

您可以使用parent对象来解决main iframe所在的容器。