js创建数据共享接口——简化框架之间相互传值


Posted in Javascript onOctober 23, 2011

很多框架存在父子关系,操作起来十分麻烦,很多同学经常出现这样悲催的代码:

window.parent.document.getElementById("main") 
.contentWindow.document.getElementById('input').value = 
document.getElementById('myIframe') 
.contentWindow.document.getElementById('s0').value;

其实这个问题可以被大大的简化,框架应用中有一个固定不变的窗口叫window.top,如果我们把数据缓存到这个页面,其下所有框架都可以获取到,无论子页面如何变幻。不需要采用Cookie,也不需要采用什么HTML5本地数据库策略,你只需要每个页面引用一个js文件,内容如下:
var share = { 
/** 
* 跨框架数据共享接口 
* @param {String} 存储的数据名 
* @param {Any} 将要存储的任意数据(无此项则返回被查询的数据) 
*/ 
data: function (name, value) { 
var top = window.top, 
cache = top['_CACHE'] || {}; 
top['_CACHE'] = cache; 
return value ? cache[name] = value : cache[name]; 
}, 
/** 
* 数据共享删除接口 
* @param {String} 删除的数据名 
*/ 
removeData: function (name) { 
var cache = window.top['_CACHE']; 
if (cache && cache[name]) delete cache[name]; 
} 
};

这个寥寥数行的方法可以共享任意类型的数据供各个框架页面读取,它与页面名称、层级毫无关系,就算哪天框架页面层级被修改,你也完全不用担心,它可正常工作。
例如,如我们可以在A页面存入共享数据:
share.data(‘myblog', ‘https://3water.com'); 
share.data(‘editTitle', function (val) { 
document.title = val; 
});

然后某框架页面任意取A页面的数据
alert(‘我的博客地址是: ‘ + share.data(‘myblog'); 
var editTitle = share.data(‘editTitle'); 
editTitle(‘我已经获取到了数据');

对,就这么简单!你还可以在artDialog 的iframeTools扩展中看到此技术身影。
Javascript 相关文章推荐
Js 时间间隔计算的函数(间隔天数)
Nov 15 Javascript
AngularJS入门教程之Hello World!
Dec 06 Javascript
JavaScript检测上传文件大小的方法
Jul 22 Javascript
JavaScript hasOwnProperty() 函数实例详解
Aug 04 Javascript
js获取css的各种样式并且设置他们的方法
Aug 22 Javascript
基于vue实现可搜索下拉框定制组件
Mar 26 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 Javascript
js使用swiper实现层叠轮播效果实例代码
Dec 12 Javascript
微信小程序实现联动选择器
Feb 15 Javascript
JavaScript 继承 封装 多态实现及原理详解
Jul 29 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
Oct 16 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
Nov 12 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
Oct 23 #Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
Oct 23 #Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
Oct 23 #Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 #Javascript
js两行代码按指定格式输出日期时间
Oct 21 #Javascript
jQuery中live方法的重复绑定说明
Oct 21 #Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
Oct 21 #Javascript
You might like
PHP也可以?成Shell Script
2006/10/09 PHP
php URL编码解码函数代码
2009/03/10 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
jquery $.ajax入门应用一
2008/11/19 Javascript
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
JavaScript函数的4种调用方法详解
2014/04/22 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
JS实现全屏预览F11功能的示例代码
2018/07/23 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
Python内置函数——__import__ 的使用方法
2017/11/24 Python
Python中str.join()简单用法示例
2018/03/20 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
Pytorch 神经网络—自定义数据集上实现教程
2020/01/07 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
北京银河万佳Java面试题
2012/03/21 面试题
咖啡蛋糕店创业计划书
2014/01/28 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
客服部班长工作责任制
2014/02/25 职场文书
幼师个人总结范文
2015/02/28 职场文书
2016年第十九届推普周活动总结
2016/04/06 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫