定义标准接口
Interface={};
Interface.ParentWin={};
Interface.ChildWin={};
/**
*父页面提供的标准接口函数名称
*/
Interface.ParentWin.funName={
getDataFun:"getDataFun",//子页面调用,提供给子页面的数据接口
updateDataFun:"updateDataFun",//子页面调用,向父页面提交数据接口
closeFun:"closeFun"//子页面需要关闭时,调用父页面的关闭窗口接口
}
/**
*父页面设置需要提供给子页面的接口函数
*@paramchildWinId:要使用的子页面对应接口的id,该id需要与子页面中定义的id一致
*@paramfunctionName:需要注册的回调函数名称,接口名称只能是Interface.ParentWin.funName中定义的名称
*@paramcallbackFun:子页面数据向父页面更新数据时的回调函数,接口入参为js对象
*/
Interface.ParentWin.setFunForChild=function(childWinId,functionName,callbackFun){
if(comm.isEmpty(childWinId)){
alert("没有为子页面调用接口定义对象Id");
return;
}
//保存父页面提供给子页面调用的接口总对象
if(comm.isEmpty(window.childCallbackObj)){
window.childCallbackObj={};
}
//与指定子页面对应的回调接口对象
varchildCallbackObj=window.childCallbackObj;
if(comm.isEmpty(childCallbackObj[childWinId])){
childCallbackObj[childWinId]={};
}
varchildObj=childCallbackObj[childWinId];
if(!comm.isEmpty(childObj[functionName])){
alert("子页面"+childWinId+"所需调用接口已存在"+functionName);
return;
}
//检查接口是否为注册的接口
for(varproinInterface.ParentWin.funName){
if(Interface.ParentWin.funName[pro]==functionName){
childObj[functionName]=callbackFun;
return;
}
}
alert("子页面"+childWinId+"所需调用接口未注册:"+functionName+"。请检查接口定义声明对象。");
}
/**
*检查指定的子页面调用接口是否存在
*/
Interface.ChildWin.checkValid=function(childWinId,funName){
varparentWin=window.parent;
varchildCallbackObj=parentWin.childCallbackObj;
if(comm.isEmpty(childWinId)){
alert("子页面调用接口定义对象Id不能为空!");
returnfalse;
}
if(comm.isEmpty(childCallbackObj)){
alert("父页面调用接口定义的对象不存在");
returnfalse;
}
varchildObj=childCallbackObj[childWinId];
if(comm.isEmpty(childObj)){
alert("子页面调用接口定义的对象不存在");
returnfalse;
}
if(comm.isEmpty(childObj[funName])){
alert("父页面调用接口定义不存在:"+funName);
returnfalse;
}
returntrue;
}
/**
*子页面调用父页面的接口函数
*@childWinId:子页面定义的自身页面Id
*@funcName:需要调用的回调函数名称
*@params:需要传递的参数
*@return:如果函数有返回值则通过其进行返回
*/
Interface.ChildWin.callBack=function(childWinId,funcName,params){
if(!Interface.ChildWin.checkValid(childWinId,funcName)){
return;
}
varparentWin=window.parent;
varchildObj=parentWin.childCallbackObj[childWinId];
returnchildObj[funcName].call(parentWin,params);
}
demo
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>父页面</title>
</head>
<body>
<scriptsrc="js/common.js"></script>
<script>
//传给子页面的值
Interface.ParentWin.setFunForChild("data",Interface.ParentWin.funName.getDataFun,function(){
returnvalue;
});
//获取子页面函数并调用
window.fun;
Interface.ParentWin.setFunForChild("test",Interface.ParentWin.funName.updateDataFun,function(param){
fun=param;
});
//调用
varval=fun("1111");
console.log(val);
</script>
</body>
</html>
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>子页面</title>
</head>
<body>
<scriptsrc="js/common.js"></script>
<script>
//父页面传入数据
vardata=Interface.ChildWin.callBack("data",Interface.ParentWin.funName.getDataFun);
console.log(data);
//提供给父页面调用的函数
Interface.ChildWin.callBack("test",Interface.ParentWin.funName.updateDataFun,function(data){
alert(data);
varstr="xxx";
returnstr;
});
</script>
</body>
</html>
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h56423.shtml