You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

window.open打开_blank新窗口后location.reload执行被阻塞问题咨询

问题解决:window.open打开新窗口后原页面重载被阻塞的问题

问题根因

  • 原有代码存在两处语法错误:location. hostname 中间多余空格、拼接端口的冒号未包裹为字符串,语法错误会干扰后续代码执行时序
  • 部分浏览器处理window.open打开新窗口的逻辑会占用主线程同步栈,导致后续的location.reload()被挂起,直到新窗口关闭才会触发执行

解决方案

将location.reload()逻辑异步化,放入宏任务队列等待执行,避开window.open的同步阻塞即可。修正后代码如下:

// 打开新窗口,已修正原代码语法问题
window.open(location.protocol + '//' + location.hostname + ':' + location.port + '/print_receipt/' + res[0], '_blank');
// 异步触发当前页面重载,无需等待新窗口关闭
setTimeout(() => {
  location.reload();
}, 0);

方案说明

setTimeout设置0延迟时,不会立刻执行回调,而是等待当前主线程的所有同步任务(包含window.open的初始化逻辑)执行完成后再调用回调,完美避开新窗口的阻塞逻辑,实现新窗口打开后立刻重载原页面的需求。


内容的提问来源于stack exchange,提问作者justice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:18:01