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 相关文章推荐
JSON JQUERY模板实现说明
Jul 03 Javascript
js null,undefined,字符串小结
Aug 21 Javascript
javascript 获取模态窗口的滚动位置代码
Aug 06 Javascript
javascript中普通函数的使用介绍
Dec 19 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
May 28 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
Nov 09 Javascript
微信小程序 UI布局常用技巧整理总结
Dec 05 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
Jan 10 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
May 17 Javascript
vue页面切换到滚动页面显示顶部的实例
Mar 13 Javascript
js实现点击按钮复制文本功能
Jul 20 Javascript
jQuery实现图片切换效果
Oct 19 jQuery
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 smarty的预保留变量总结
2008/12/04 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
jQuery入门知识简介
2010/03/04 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
javascript实现别踩白块儿小游戏程序
2015/11/22 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
python调用百度语音识别api
2018/08/30 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
小学新教师培训方案
2014/02/03 职场文书
实习生矿工检讨书
2014/10/13 职场文书
大学军训的体会
2014/11/08 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
初中体育教学随笔
2015/08/15 职场文书
新手初学Java List 接口
2021/07/07 Java/Android