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 节点操作 以及DOMDocument属性和方法
Dec 06 Javascript
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
Dec 02 Javascript
10个新的最有前途的JavaScript框架
Mar 12 Javascript
js 中的switch表达式使用示例
Jun 03 Javascript
js正则表达式验证邮件地址
Nov 12 Javascript
JavaScript:Date类型全面解析
May 19 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
Apr 04 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
May 24 jQuery
微信小程序左滑删除功能开发案例详解
Nov 12 Javascript
js实现下拉框二级联动
Dec 04 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
package.json中homepage属性的作用详解
Mar 11 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
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
Puppeteer环境搭建的详细步骤
2018/09/21 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
do you have any Best Practice for testing
2016/06/04 面试题
机械工程系毕业生求职信
2013/09/27 职场文书
会计找工作求职信范文
2013/12/09 职场文书
团队经理竞聘书
2014/03/31 职场文书
食品安全工作方案
2014/05/07 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
CAD实训总结范文
2015/08/03 职场文书
浅谈MySQL中的六种日志
2022/03/23 MySQL
Python&Matlab实现樱花的绘制
2022/04/07 Python