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 相关文章推荐
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
javascript函数以及基础写法100多条实用整理
Jan 13 Javascript
jquery easyui 结合jsp简单展现table数据示例
Apr 18 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
Mar 28 Javascript
javascript 玩转Date对象(实例讲解)
Jul 11 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
Feb 02 jQuery
promise和co搭配生成器函数方式解决js代码异步流程的比较
May 25 Javascript
JavaScript 高性能数组去重的方法
Sep 20 Javascript
node中使用es6/7/8(支持性与性能)
Mar 28 Javascript
layui使用templet格式化表格数据的方法
Sep 16 Javascript
react-native 实现购物车滑动删除效果的示例代码
Jan 15 Javascript
Vue深入理解插槽slot的使用
Aug 05 Vue.js
微信小程序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删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
phpExcel中文帮助手册之常用功能指南
2014/08/18 PHP
php生成短域名函数
2015/03/23 PHP
php备份数据库类分享
2015/04/14 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
解决js页面滚动效果scrollTop在FireFox与Chrome浏览器间的兼容问题的方法
2015/12/03 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
js实现时钟定时器
2020/03/26 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
python基础梳理(一)(推荐)
2019/04/06 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
解决Python Matplotlib绘图数据点位置错乱问题
2020/05/16 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
酒店个人培训自我鉴定
2013/12/11 职场文书
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
安全月活动总结
2014/05/05 职场文书
公司授权委托书样本
2014/09/15 职场文书
房屋买卖委托书格式范本格式
2014/10/13 职场文书
收款委托书
2014/10/14 职场文书
平安建设汇报材料
2014/12/29 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python