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不是基础的基础
Dec 24 Javascript
sina的lightbox效果。
Jan 09 Javascript
js树形控件脚本代码
Jul 24 Javascript
清空上传控件input file的值
Jul 03 Javascript
jQuery 一个图片切换的插件
Oct 09 Javascript
JS获取IP、MAC和主机名的五种方法
Nov 14 Javascript
js实时获取并显示当前时间的方法
Jul 31 Javascript
jQuery文件上传控件 Uploadify 详解
Jun 20 Javascript
学习vue.js条件渲染
Dec 03 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
Apr 20 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 jQuery
express + jwt + postMan验证实现持久化登录
Jun 05 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内存管理之谁动了我的内存
2013/06/20 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
php实现简单文件下载的方法
2015/01/30 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
JS获取当前页面名称的简单实例
2016/08/19 Javascript
js获取当前周、上一周、下一周日期
2017/03/19 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
Layui点击图片弹框预览的实现方法
2019/09/16 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
跟老齐学Python之print详解
2014/09/28 Python
探究Python中isalnum()方法的使用
2015/05/18 Python
TensorFlow实现Batch Normalization
2018/03/08 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
python 字段拆分详解
2019/12/17 Python
Django中的DateTimeField和DateField实现
2021/02/24 Python
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
测试驱动开发的主要步骤是什么
2014/12/10 面试题
个人总结格式范文
2015/03/09 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书