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 相关文章推荐
IE和Firefox下javascript的兼容写法小结
Dec 10 Javascript
网络之美 JavaScript中Get和Set访问器的实现代码
Sep 19 Javascript
巧用局部变量提升javascript性能
Feb 24 Javascript
jquery中append()与appendto()用法分析
Nov 14 Javascript
浅谈Jquery为元素绑定事件
Apr 27 Javascript
jQuery实现的多屏图像图层切换效果实例
May 07 Javascript
Bootstrap实现导航栏的2种方式
Nov 28 Javascript
详解javascript获取url信息的常见方法
Dec 19 Javascript
详解a++和++a的区别
Aug 30 Javascript
vue 实现的树形菜的实例代码
Mar 19 Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 Javascript
React服务端渲染原理解析与实践
Mar 04 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
substr()函数中文版
2006/10/09 PHP
PHP中break及continue两个流程控制指令区别分析
2011/04/18 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
PHP代码维护,重构变困难的4种原因分析
2016/01/25 PHP
PHP那些琐碎的知识点(整理)
2017/05/20 PHP
奇妙的js
2007/09/24 Javascript
juqery 学习之四 筛选过滤
2010/11/30 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
关于JavaScript的with 语句的使用方法
2011/05/09 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
Python验证企业工商注册码
2015/10/25 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
python实现文件的备份流程详解
2019/06/18 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
基于python实现删除指定文件类型
2020/07/21 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
亚洲最大的运动鞋寄售店:KicksCrew
2020/11/26 全球购物
会计系毕业生求职信
2014/05/28 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
大一新生检讨书
2014/10/29 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
2014年党小组工作总结
2014/12/20 职场文书
大学生读书笔记范文
2015/07/01 职场文书
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python