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

如何在Blazor WASM中调用Tauri API?窗口功能调用异常求助

解决Tauri + Blazor WASM中调用窗口API的异常问题

我用Tauri + Blazor WebAssembly开发桌面应用,想添加窗口最大化这类原生窗口功能,但在index.razor里调用JavaScript函数时触发异常,没法定位问题。已经通过yarn add @tauri-apps/api安装了依赖,调用prompt、alert这类普通JS函数没问题,但就是没法正常调用Tauri API。

相关代码

js/scripts.js代码

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

export async function ToggleWindowMax() {
  await appWindow.toggleMaximize();
}

Pages/index.razor代码

@page "/"
@inject IJSRuntime JS

<PageTitle>Index</PageTitle>

<MudStack>
    <MudButton Class="pa-3 border-solid" Variant="Variant.Outlined" DisableRipple="true" OnClick="ToggleMax"
        Style="@($"color: {Colors.Purple.Accent3}; border-color:{Colors.Purple.Accent2}; border-width: 2px; border-radius: 9999px;")">
        @result
    </MudButton>

</MudStack>

@code {
    private IJSObjectReference? module;
    private string result = "Toggle Maximize";
    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            module = await JS.InvokeAsync<IJSObjectReference>("import", "./js/scripts.js");
        }
    }

    private async Task ToggleMax()
    {
        await module.InvokeVoidAsync("ToggleWindowMax");
    }
}

问题排查与解决方案

1. 配置Tauri窗口权限

Tauri的窗口操作需要显式配置权限,否则会触发权限拦截。打开项目根目录的tauri.conf.json,确保tauri > allowlist > window下包含对应权限:

{
  "tauri": {
    "allowlist": {
      "window": {
        "toggleMaximize": true,
        "maximize": true,
        "unmaximize": true
      }
    }
  }
}

2. 添加错误捕获定位问题

修改JS模块,添加异常捕获逻辑,方便在控制台查看具体错误信息:

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

export async function ToggleWindowMax() {
  try {
    await appWindow.toggleMaximize();
  } catch (error) {
    console.error("窗口最大化操作失败:", error);
    throw error;
  }
}

3. 优化Blazor模块调用逻辑

在Blazor的点击方法中,先确认模块已加载完成,避免空引用异常:

private async Task ToggleMax()
{
    if (module == null)
    {
        module = await JS.InvokeAsync<IJSObjectReference>("import", "./js/scripts.js");
    }
    await module.InvokeVoidAsync("ToggleWindowMax");
}

4. 确认运行环境

Tauri API仅在Tauri打包的桌面应用内可用,不要直接在浏览器中运行Blazor页面测试该功能,必须启动Tauri桌面应用进行验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:01:27