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 相关文章推荐
谷歌浏览器 insertCell与appendChild的区别
Feb 12 Javascript
Js 获取当前日期时间及其它操作实现代码
Mar 04 Javascript
使用JQuery和s3captche实现一个水果名字的验证
Aug 14 Javascript
如何获取JQUERY AJAX返回的JSON结果集实现代码
Dec 10 Javascript
js设置组合快捷键/tabindex功能的方法
Nov 21 Javascript
JS显示下拉列表框内全部元素的方法
Mar 31 Javascript
js实现div层缓慢收缩与展开的方法
May 11 Javascript
Bootstrap每天必学之标签页(Tab)插件
Aug 09 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
Jul 24 Javascript
bootstrapValidator 重新启用提交按钮的方法
Feb 20 Javascript
浅谈Vue父子组件和非父子组件传值问题
Aug 22 Javascript
Vue2 模板template的四种写法总结
Feb 23 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
PHP 文件系统详解
2012/09/13 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
php 获取SWF动画截图示例代码
2014/02/10 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
又一个小巧的图片预加载类
2007/05/05 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
JS实现数组去重复值的方法示例
2017/02/18 Javascript
js实现导航吸顶效果
2017/02/24 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
python的re模块应用实例
2014/09/26 Python
详细解读Python的web.py框架下的application.py模块
2015/05/02 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
英国健身超市:Fitness Superstore
2019/06/17 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
元旦趣味活动方案
2014/08/22 职场文书
倡议书的写法
2014/08/30 职场文书
信用卡工作证明模板
2014/09/14 职场文书
个人典型事迹材料
2014/12/30 职场文书
转变工作作风心得体会
2016/01/23 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
2022年四月新番
2022/03/15 日漫