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模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
Nov 30 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
Jan 15 Javascript
javascript小数四舍五入多种方法实现
Dec 23 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
Sep 03 Javascript
AngularJS基础 ng-mouseover 指令简单示例
Aug 02 Javascript
JavaScript阻止表单提交方法(附代码)
Aug 15 Javascript
JS处理一些简单计算题
Feb 24 Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 Javascript
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
微信小程序JS加载esmap地图的实例详解
Sep 04 Javascript
简单了解three.js 着色器材质
Aug 03 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如何编写易读的代码
2007/07/10 PHP
php自动跳转中英文页面
2008/07/29 PHP
PHP自动重命名文件实现方法
2014/11/04 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
js轮播图代码分享
2016/07/14 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
Python字符串的encode与decode研究心得乱码问题解决方法
2009/03/23 Python
Python的迭代器和生成器使用实例
2015/01/14 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
Python登录注册验证功能实现
2018/06/18 Python
python实现简单名片管理系统
2018/11/30 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
航海技术专业毕业生求职信
2014/04/06 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
敬老院活动感想
2015/08/07 职场文书
初级职称评定工作总结
2015/08/13 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA
MongoDB数据库之添删改查
2022/04/26 MongoDB