父页面子页面交互接口

定义标准接口实现父页面与子页面的数据交互。

 
 Interface= {};
 Interface.ParentWin = {};
 Interface.ChildWin = {};


 /**
  * 父页面提供的标准接口函数名称
  */
 Interface.ParentWin.funName = {
 	getDataFun: "getDataFun", //子页面调用,提供给子页面的数据接口
 	updateDataFun: "updateDataFun", //子页面调用,向父页面提交数据接口
 	closeFun: "closeFun" //子页面需要关闭时,调用父页面的关闭窗口接口
 }


 /**
  * 父页面设置需要提供给子页面的接口函数
  * @param childWinId :要使用的子页面对应接口的id,该id需要与子页面中定义的id一致
  * @param functionName  : 需要注册的回调函数名称,接口名称只能是Interface.ParentWin.funName中定义的名称
  * @param callbackFun :子页面数据向父页面更新数据时的回调函数,接口入参为js对象
  */
 Interface.ParentWin.setFunForChild = function(childWinId, functionName, callbackFun) {
 	if (comm.isEmpty(childWinId)) {
 		alert("没有为子页面调用接口定义对象Id");
 		return;
 	}
 	//保存父页面提供给子页面调用的接口总对象
 	if (comm.isEmpty(window.childCallbackObj)) {
 		window.childCallbackObj = {};
 	}
 	//与指定子页面对应的回调接口对象
 	var childCallbackObj = window.childCallbackObj;
 	if (comm.isEmpty(childCallbackObj[childWinId])) {
 		childCallbackObj[childWinId] = {};
 	}

 	var childObj = childCallbackObj[childWinId];
 	if (!comm.isEmpty(childObj[functionName])) {
 		alert("子页面" + childWinId + " 所需调用接口已存在" + functionName);
 		return;
 	}
 	//检查接口是否为注册的接口
 	for (var pro in Interface.ParentWin.funName) {
 		if (Interface.ParentWin.funName[pro] == functionName) {
 			childObj[functionName] = callbackFun;
 			return;
 		}
 	}
 	alert("子页面 " + childWinId + " 所需调用接口未注册:" + functionName + "。请检查接口定义声明对象。");
 }


 /**
  * 检查指定的子页面调用接口是否存在
  */
 Interface.ChildWin.checkValid = function(childWinId, funName) {
 	var parentWin = window.parent;
 	var childCallbackObj = parentWin.childCallbackObj;
 	if (comm.isEmpty(childWinId)) {
 		alert("子页面调用接口定义对象Id不能为空!");
 		return false;
 	}
 	if (comm.isEmpty(childCallbackObj)) {
 		alert("父页面调用接口定义的对象不存在");
 		return false;
 	}
 	var childObj = childCallbackObj[childWinId];
 	if (comm.isEmpty(childObj)) {
 		alert("子页面调用接口定义的对象不存在");
 		return false;
 	}
 	if (comm.isEmpty(childObj[funName])) {
 		alert("父页面调用接口定义不存在:" + funName);
 		return false;
 	}
 	return true;
 }


 /**
  * 子页面调用父页面的接口函数
  * @childWinId :子页面定义的自身页面Id
  * @funcName : 需要调用的回调函数名称
  * @params :  需要传递的参数
  * @return :如果函数有返回值则通过其进行返回
  */
 Interface.ChildWin.callBack = function(childWinId, funcName, params) {
 	if (!Interface.ChildWin.checkValid(childWinId, funcName)) {
 		return;
 	}

 	var parentWin = window.parent;
 	var childObj = parentWin.childCallbackObj[childWinId];
 	return childObj[funcName].call(parentWin, params);
 }

调用例子

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>父页面</title>
	</head>
	<body>
		
		<script src="js/common.js"></script>
		<script>
			//传给子页面的值
			Interface.ParentWin.setFunForChild("data", Interface.ParentWin.funName.getDataFun, function() {
				return value;
			});
			
			//获取子页面函数并调用
			window.fun;
			Interface.ParentWin.setFunForChild("test",Interface.ParentWin.funName.updateDataFun,function(param){
				fun = param;
			});
			
			//调用
			var val = fun("1111");
			console.log(val);
		</script>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>子页面</title>
	</head>
	<body>
		<script src="js/common.js"></script>
		<script>
			
			//父页面传入数据
			var data = Interface.ChildWin.callBack("data", Interface.ParentWin.funName.getDataFun);  
			console.log(data);
			
			//提供给父页面调用的函数
			Interface.ChildWin.callBack("test",Interface.ParentWin.funName.updateDataFun,function(data){
				alert(data);
				var str = "xxx";
				return str;
			});
			
		</script>
	</body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值