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

location.reload()未立即执行,如何实现页面触发后即刻重载?

问题原因

eel.ReloadPage()是异步调用JS函数,Python代码不会等待页面重载完成就继续执行后续逻辑,而location.reload()触发的页面重载需要时间,导致后续的数据清理、UI构建等操作先完成,之后页面重载又重置了前端状态,出现不符合预期的行为。

解决方案

通过页面重载后回调Python的方式,将后续逻辑延迟到页面完全重载后执行,具体步骤如下:

1. 修改Python代码

  • 在LoadButtonFunc中,先读取并保存文件数据,再触发页面重载,暂停后续逻辑。
  • 新增一个被eel暴露的函数,用于页面重载完成后继续执行数据初始化和UI构建。
def LoadButtonFunc(self):
    chosen_load_file = filedialog.askopenfile(title="Load testing session" ,mode = 'r',filetypes = [("Pashosh file", "*.psh")])
    if chosen_load_file == None:
        return
    
    # 先读取文件内容并保存,避免页面重载后文件对象失效
    self.loaded_session_data = json.load(chosen_load_file)
    chosen_load_file.close()  # 关闭文件
    
    # 触发页面重载,此时不再执行后续逻辑
    eel.ReloadPage()                    

# 新增:页面重载完成后调用此函数继续处理
@eel.expose
def ContinueLoadAfterReload(self):
    # 重置数据
    self.DB.clear()                     
    self.global_row_index = 0
    self.input_dir = None

    # 从保存的数据中恢复
    self.DB, self.input_dir = self.loaded_session_data
    self.WorkDirButtonFunc(self.input_dir)

    # 构建UI
    for elem in self.DB:
        eel.BuildRowUI(self.matlabTests_list, self.global_row_index, elem)
        self.UpdateRowIndex()

2. 修改JavaScript代码

在页面加载完成时,调用Python的ContinueLoadAfterReload函数,触发后续逻辑:

eel.expose(ReloadPage);
function ReloadPage()
{
  location.reload();
}

// 页面完全加载后,通知Python继续执行加载流程
window.addEventListener('load', function() {
    eel.ContinueLoadAfterReload();
});

关键说明

  • 页面重载后,前端JS环境会重启,因此必须通过window.load事件触发后续操作,确保页面已完全初始化。
  • 提前读取并保存文件数据,避免页面重载后文件对象被销毁导致无法读取。
  • eel的跨语言调用是异步的,通过回调机制才能保证执行顺序符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:42:29