【tauri+rust】App会加载白屏,有时显示在左上角显示一小块,如何优化

使用tauri做App时不可避免的会遇到上图问题,Tauri在启动时会先创建原生窗口,然后才加载WebView引擎并执行前端代码,这就导致存在一个时间差。当前端框架初始化耗时较为明显,Vue/React等现代前端框架需要完成虚拟DOM构建、组件挂载等。

解决方案

在创建时我们先将原生窗口改为不可见,等前端界面加载完成后再加载窗口即可。

主要操作如下:

1、tauri.conf.json设置visible:false
2、main.rs增加命令:show_main_window,
rust 复制代码
// 显示主窗口
#[tauri::command]
pub async fn show_main_window(window: tauri::Window) -> Result<(), String> {
    log::info!("Frontend requested to show main window");
    
    // 短暂延迟确保渲染完成
    tokio::time::sleep(std::time::Duration::from_millis(200)).await;
    
    window.show().map_err(|e| e.to_string())?;
    window.center().map_err(|e| e.to_string())?;
    window.set_focus().map_err(|e| e.to_string())?;
    
    log::info!("Main window is now visible");
    Ok(())
}
3、App.vue增加调用show_main_window
javascript 复制代码
import { invoke } from '@tauri-apps/api/core';

onMounted(async () => {
  // 初始化多语言
  localStorage.setItem('client-lang', 'zh_CN');
  // 初始化本地数据库
  try {
    await localDB.init();
    console.log('本地数据库初始化成功');
  } catch (error) {
    console.error('本地数据库初始化失败:', error);
  }
  try {
    // 等待 Vue 应用完全挂载
    await new Promise(resolve => setTimeout(resolve, 500))
    await invoke('show_main_window')
    
  } catch (error) {
    console.error('Failed to show window:', error)
    // 备用方案:直接使用 API
    try {
      await appWindow.show()
      await appWindow.center()
    } catch (fallbackError) {
      console.error('Fallback also failed:', fallbackError)
    }
  }
});
</script>
相关推荐
栈与堆14 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust
superman超哥14 小时前
双端迭代器(DoubleEndedIterator):Rust双向遍历的优雅实现
开发语言·后端·rust·双端迭代器·rust双向遍历
1二山似14 小时前
crmeb多商户启动swoole时报‘加密文件丢失’
后端·swoole
马卡巴卡14 小时前
Java CompletableFuture 接口与原理详解
后端
Jayden_Ruan14 小时前
C++蛇形方阵
开发语言·c++·算法
神奇小汤圆14 小时前
Java线程协作工具:CountDownLatch 、CyclicBarrier、Phaser、Semaphore 、Exchanger
后端
gelald15 小时前
ReentrantLock 学习笔记
java·后端
心.c15 小时前
如何基于 RAG 技术,搭建一个专属的智能 Agent 平台
开发语言·前端·vue.js
计算机学姐15 小时前
基于SpringBoot的校园资源共享系统【个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·mysql·spring·信息可视化
智航GIS15 小时前
10.7 pyspider 库入门
开发语言·前端·python