如何实现子窗口2向子窗口1传值?现有代码传父窗口求修改指导
如何实现两个子窗口之间的传值?
嗨,我来帮你搞定这个子窗口传值的问题~你当前的代码用window.opener直接指向了父窗口,所以值才会跑到父窗口里。要实现子窗口2向子窗口1传值,核心是要找到正确的目标窗口引用,这里给你两种实用的方案:
方案1:通过父窗口保存子窗口引用(推荐)
因为父窗口是两个子窗口的共同“上级”,让它帮忙管理子窗口的引用是最直接的方式。
第一步:父窗口中保存子窗口1的引用
在父窗口的代码里,打开子窗口1时把它的引用存在全局变量中:
// 父窗口代码 let childWindow1; function openChild1() { // 替换成你的子窗口1实际URL childWindow1 = window.open('child1.html', 'child1', 'width=400,height=300'); }
第二步:子窗口2中通过父窗口访问子窗口1
修改你子窗口2里的post_value函数,通过父窗口的引用找到子窗口1,再修改它的DOM元素:
// 子窗口2的代码 function post_value(){ var val='5'; // 先判断目标窗口是否可用,避免报错 if(window.opener && window.opener.childWindow1 && !window.opener.childWindow1.closed){ window.opener.childWindow1.document.getElementById('barcode1txt').value = val; } self.close(); }
方案2:使用localStorage跨窗口通信
如果两个子窗口是同源的(同域名、同协议、同端口),也可以用浏览器的localStorage来传递数据,这种方式不需要依赖父窗口的引用:
第一步:子窗口2写入数据到localStorage
// 子窗口2的代码 function post_value(){ var val='5'; localStorage.setItem('barcodeValue', val); self.close(); }
第二步:子窗口1监听storage事件接收数据
在子窗口1的代码里添加监听,当localStorage的数据更新时自动获取值:
// 子窗口1的代码 window.addEventListener('storage', function(e) { if(e.key === 'barcodeValue'){ document.getElementById('barcode1txt').value = e.newValue; // 可选:用完后清除存储的数据,避免重复触发 localStorage.removeItem('barcodeValue'); } });
一些注意点
- 方案1需要保证父窗口始终处于打开状态,且子窗口1没有被关闭;
- 方案2要求两个子窗口必须是同源的,否则无法共享
localStorage; - 两种方案都建议先判断目标窗口/存储是否可用,防止出现控制台报错。
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

