JS创建数据共享接口——简化框架之间相互传值
作者:夜航船时间:2026-10-26 15:04:27浏览:91
本文介绍了一种基于window.top对象的简易跨框架数据共享方案。通过在全局顶层窗口维护_cache对象,子页面可直接读写任意类型数据,无需Cookie或HTML5本地存储。该方法解耦了页面层级与数据访问,简化了复杂嵌套框架间的数据交互逻辑。
跨框架数据共享方案
许多前端框架存在父子嵌套关系,导致操作复杂。开发者常遇到类似繁琐的代码片段:
代码如下:
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://www.jb51.net');
share.data(‘editTitle', function (val) {
document.title = val;
}); 随后,在任意子框架页面中即可获取A页面存储的数据:
代码如下:
alert(‘我的博客地址是: ‘ + share.data(‘myblog');
var editTitle = share.data(‘editTitle');
editTitle(‘我已经获取到了数据'); 实现过程十分简洁。此外,在artDialog的iframeTools扩展中也可看到该技术的应用实例。
作者最新文章
在 NestJS 中使用管道验证数据与守卫控制访问权限
2026-11-05 12:43:41
Node.js后端生成高强度随机字符串的方法
2026-11-04 16:29:54
Node.js环境中怎么使用axios或http模块发送GET请求
2026-11-03 21:57:15
Node.js环境下怎么实现JS反混淆自动化?常用库与CLI工具推荐
2026-11-03 21:15:54
解决JS逆向常见报错:缺少DOM环境导致代码运行失败
2026-11-03 20:41:59
