2022年6月26日起Microsoft Edge无法复用子标签页问题咨询
问题原因
2022年6月26日前后微软推送的Edge 103稳定版,默认启用了跨站窗口名称隔离安全机制:当父页面通过window.open打开跨源(不同域名、端口、协议)页面时,浏览器会对不同源的窗口名称做隔离处理,不再允许跨源场景复用相同target值的标签页。这个特性是默认开启的隐私防护能力,用来阻断恶意站点通过窗口名称实现跨站用户追踪,不是代码逻辑或者本地设置出错。
修复方案
根据是否能管控页面代码,可选两类方案:
方案1:代码适配(推荐,不依赖用户本地配置)
如果父页面属于可管控范围,用同域中转的方式就能绕开跨源隔离限制,完全恢复标签复用能力,不需要用户改任何浏览器设置:
- 先在自己站点下新增一个空白的同域中转页,比如路径为
/profile-tab-redirect - 改写原有
launchProfile方法,不再直接打开跨域目标地址,而是先打开同域中转页,固定复用profileTab这个target名,把要跳转的真实地址通过同域缓存传递给中转页 - 中转页加载后读取缓存的真实地址,直接跳转到目标外部站点即可
对应实现代码如下:
原方法改写:
function launchProfile(profileLink){ profileLink += 'profile=' + tempProfile + '&profileNumber=' + tempProfileNumber; // 存储待跳转地址,同域页面可直接读取 sessionStorage.setItem('profileTargetUrl', profileLink); // 始终打开同域中转页,复用固定target名 window.open('/profile-tab-redirect', 'profileTab'); }
中转页代码(放在自己站点同域路径下即可):
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>跳转中</title> </head> <body> <script> const jumpUrl = sessionStorage.getItem('profileTargetUrl'); if (jumpUrl) { // 替换当前地址,不会产生额外历史记录 location.replace(jumpUrl); } </script> </body> </html>
方案2:调整Edge配置(适合企业内网场景,会降低隐私防护等级)
如果无法修改页面代码,可以通过关闭对应安全特性恢复原有行为,仅建议在完全可信的内部使用环境操作:
- 个人用户手动配置:打开Edge,地址栏输入
edge://flags进入实验性功能页,搜索Window name isolation,将对应选项的值改为Disabled,重启浏览器后原有代码即可正常复用标签页。 - 企业批量部署:通过Windows组策略找到Edge对应的
Configure window name isolation策略项,设置为禁用后统一下发给域内设备,不需要终端用户手动调整。
内容的提问来源于stack exchange,提问作者muddyWildcat
相关产品推荐
相关产品推荐

