JS 封装父页面子页面交互接口的实例代码


Posted in Javascript onJune 25, 2019

定义标准接口

 

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);
 }

demo

<!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>

总结

以上所述是小编给大家介绍的JS 封装父页面子页面交互接口的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
网页上的Javascript编辑器和代码格式化
Apr 25 Javascript
纯JS实现动态时间显示代码
Feb 08 Javascript
Javascript加载速度慢的解决方案
Mar 11 Javascript
后台获取ZTREE选中节点的方法
Feb 12 Javascript
深入学习JavaScript中的原型prototype
Aug 13 Javascript
基于Vue.js实现数字拼图游戏
Aug 02 Javascript
JavaScript探测CSS动画是否已经完成的方法
Aug 30 Javascript
JavaScript手风琴页面制作
May 17 Javascript
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
VUE中使用Vue-resource完成交互
Jul 21 Javascript
Vue的事件响应式进度条组件实例详解
Feb 04 Javascript
vue+element实现表单校验功能
May 20 Javascript
微信小程序Echarts图表组件使用方法详解
Jun 25 #Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 #Javascript
ES6 Object属性新的写法实例小结
Jun 25 #Javascript
ES6模板字符串和标签模板的应用实例分析
Jun 25 #Javascript
基于Node.js搭建hexo博客过程详解
Jun 25 #Javascript
Node.js实现简单的爬取的示例代码
Jun 25 #Javascript
浅谈目前可以使用ES10的5个新特性
Jun 25 #Javascript
You might like
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
一段php加密解密的代码
2007/07/16 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
JavaScript 创建对象
2009/07/17 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
js实现文本框中焦点在最后位置
2014/03/04 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
VUE 配置vue-devtools调试工具及安装方法
2018/09/30 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
Python入门篇之字符串
2014/10/17 Python
Python 装饰器深入理解
2017/03/16 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
工程项目经理岗位职责
2013/12/15 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
高校优秀辅导员事迹材料
2014/05/07 职场文书
开展读书活动总结
2014/06/30 职场文书
2015年质检工作总结
2015/05/04 职场文书
中学图书馆工作总结
2015/08/11 职场文书
React Fragment介绍与使用详解
2021/11/11 Javascript