很多框架存在父子关系,操作起来十分麻烦,很多同学经常出现这样悲催的代码:
复制代码 代码如下:
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', ‘http://www.jb51.net');
share.data(‘edittitle', function (val) {
document.title = val;
});
然后某框架页面任意取a页面的数据
复制代码 代码如下:
alert(‘我的博客地址是: ‘ + share.data(‘myblog');
var edittitle = share.data(‘edittitle');
edittitle(‘我已经获取到了数据');
对,就这么简单!你还可以在artdialog 的iframetools扩展中看到此技术身影。
