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 相关文章推荐
javascript下给元素添加事件的方法与代码
Aug 13 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
Mar 24 Javascript
jquery实现图片裁剪思路及实现
Aug 16 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
Dec 27 Javascript
深入剖析JavaScript中的枚举功能
Mar 06 Javascript
如何获取网站icon有哪些可行的方法
Jun 05 Javascript
jquery实现图片按比例缩放示例
Jul 01 Javascript
Javascript HTML5 Canvas实现的一个画板
Apr 12 Javascript
jQuery+CSS3文字跑马灯特效的简单实现
Jun 25 Javascript
在Create React App中启用Sass和Less的方法示例
Jan 16 Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 Javascript
Vue多环境代理配置方法思路详解
Jun 21 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在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
php中var_export与var_dump的区别分析
2010/08/21 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
PHP下用Swoole实现Actor并发模型的方法
2019/06/12 PHP
jQuery Ajax 全解析
2009/02/08 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
js实现图片360度旋转
2017/01/22 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
python 将json数据提取转化为txt的方法
2018/10/26 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
详解基于 Canvas 手撸一个六边形能力图
2019/09/02 HTML / CSS
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
餐厅经理岗位职责范本
2014/02/17 职场文书
租房协议书样本
2014/08/20 职场文书
2014年医务科工作总结
2014/12/18 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android