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

NextJS+Tauri中Window未定义问题求助(自定义标题栏场景)

NextJS + Tauri 开发时出现 "Window is undefined" 错误求助

问题现象

在NextJS与Tauri组合开发时,出现了Window is undefined错误,错误截图如下:
Error Screenshot

正在尝试的操作

我想通过Tauri的appWindow对象调用appWindow.minimize()、appWindow.toggleMaximize()和appWindow.close()方法,实现自定义标题栏功能。

代码实现

import { appWindow } from "@tauri-apps/api/window";

const CustomTitleBar = () => {
  const hasLoaded = hasLoadedCSR(); // 自定义hook,通过useEffect判断组件是否已挂载

  if (typeof window === "undefined") return <></>; // 第一次尝试:禁用该组件的SSR
  if (!hasLoaded) return <></>; // 第二次尝试:禁用该组件的SSR
  return (
    <>
      <div data-tauri-drag-region className="titlebar">
        <button
          className="titlebar-button"
          id="titlebar-minimize"
          onClick={() => {
            console.log("Clicked");
            appWindow.minimize();
          }}
        >
          <img
            src="https://api.iconify.design/mdi:window-minimize.svg"
            alt="minimize"
          />
        </button>
        <button
          className="titlebar-button"
          id="titlebar-maximize"
          onClick={() => appWindow.toggleMaximize()}
        >
          <img
            src="https://api.iconify.design/mdi:window-maximize.svg"
            alt="maximize"
          />
        </button>
        <button className="titlebar-button" id="titlebar-close">
          <img
            src="https://api.iconify.design/mdi:close.svg"
            alt="close"
            onClick={() => appWindow.close()}
          />
        </button>
      </div>
    </>
  );
};

export default CustomTitleBar;

已尝试的解决方案

我判断这个问题是由SSR(服务端渲染)导致的,参考相关问题的解决方案后,尝试了两种禁用该组件SSR的方案:

  • 检查typeof window === "undefined"时返回空组件
  • 通过自定义hookhasLoadedCSR()判断组件是否挂载,未挂载时返回空组件

但这两种方案都没能解决问题,希望能得到帮助。

内容的提问来源于stack exchange,提问作者C.Tale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:50:22