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 模拟实现类似c#下的hashtable的简单功能代码
Jan 24 Javascript
jQuery实现菜单式图片滑动切换
Mar 14 Javascript
jQuery提示插件alertify使用指南
Apr 21 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
Aug 17 Javascript
jQuery结合CSS制作动态的下拉菜单
Oct 27 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
Apr 25 Javascript
easyui combogrid实现本地模糊搜索过滤多列
May 13 Javascript
zTree获取当前节点的下一级子节点数实例
Sep 05 Javascript
node实现登录图片验证码的示例代码
Apr 20 Javascript
原生JS实现手动轮播图效果实例代码
Nov 22 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
使用layer弹窗,制作编辑User信息页面的方法
Sep 27 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的中问验证码
2006/11/25 PHP
Excel数据导入Mysql数据库的实现代码
2008/06/05 PHP
php获取网页内容方法总结
2008/12/04 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
动态加载iframe
2006/06/16 Javascript
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
JavaScript判断浏览器及其版本信息
2017/01/20 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
python计算时间差的方法
2015/05/20 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
python 回调函数和回调方法的实现分析
2016/03/23 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
python+requests接口压力测试500次,查看响应时间的实例
2020/04/30 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
卫生标语大全
2014/06/21 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
茶花女读书笔记
2015/06/29 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android
python绘制云雨图raincloud plot
2022/08/05 Python