创建义数据共享接口简化框架之间相互传值

作者: nick 分类: js 发布时间: 2011-07-09 00:37 ė 6没有评论

很多框架存在父子关系,操作起来十分麻烦,很多同学经常出现这样悲催的代码:

parent.document.getElementById("main").contentWindow.document.getElementById('input}').value=iframe.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’, ‘http://www.planeart.cn’);
share.data(‘editTitle’, function (val) {
document.title = val;
});

然后某框架页面任意取A页面的数据

alert(‘我的博客地址是: ‘ + share.data(‘myblog’);
var editTitle = share.data(‘editTitle’);
editTitle(‘我已经获取到了数据’);

你可以在artDialog4.0.0 的iframeTools扩展中看到此技术身影。

对,就这么简单!

planeArt.cn原创,原文地址

本文出自 传播、沟通、分享,转载时请注明出处及相应链接。

本文永久链接: https://www.nickdd.cn/?p=1632

发表评论

您的电子邮箱地址不会被公开。

Ɣ回顶部