您的位置:首页 > 其它

如何便励当前页面中的所有FRAME(包括IFRAME和FRAMESET)

2007-07-27 14:09 525 查看
需求:

最近在做WEB程序时,有个需求是模拟IE7.0的收藏夹,做一个弹出菜单,而在点开该弹出菜单后,单击页面中的任何一个地方,都会使该弹出菜单隐藏掉(弹出菜单是一个DIV层). 

问题:

页面中可能包括框架页或IFRAME页.如何控制他们包含页面的单击事件.

解决方案:

便励页面中的所有的FRAME,并为其添加BODY的ONCLICK事件.

所添加的BODY的ONCLICK事件,要便励当前窗体的父窗体,直到最后一层.并激活该页面的隐藏弹出菜单的事件.

代码:

 




var clickEvent = function()...{InitRootBodyClick();};


//循环取出当前FRAME对象中包含的FRMAE,并为其包含的页面添加BODY的ONCLICK事件


function InitIFrameBodyClick(frameObj, clickEvent)




...{


    if(frameObj!=undefined && frameObj.document.body != null)




    ...{


    


        frameObj.document.body.onclick=clickEvent;


        if(frameObj.frames.length > 0)




        ...{


            var i;


            for(i=0;i<frameObj.frames.length;i++)




            ...{


                InitIFrameBodyClick(frameObj.frames[i], clickEvent);


            }


        


        }


    }


}


//为指定的窗体对象找到其最顶级的父窗体对象,并激活该父窗体的BODY的ONCLICK事件


function InitRootBodyClick(frameObj)




...{


    if(frameObj == undefined)




    ...{


        InitRootBodyClick(window.parent);


    }


    else if(frameObj.document.parentWindow != frameObj.document.parentWindow.parent)




    ...{


        InitRootBodyClick(frameObj.document.parentWindow.parent);


    }


    else




    ...{


        frameObj.document.body.click();


    }


}

 

后来发现第二个方法可以直接用下面代码代替,因为在初始化各个页面的ONCLICK事件时,是在浮动菜单页面发生的,因此该window对象即为该页面的window对象,作为变量存储在各页面的ONCLICK事件中.

 


function InitRootBodyClick()




...{


    


   window.document.body.click();


  


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息