【问题标题】:Blazor Component Javascript Errors (Microsoft.JSInterop.JSException)Blazor 组件 Javascript 错误 (Microsoft.JSInterop.JSException)
【发布时间】:2021-08-31 15:00:27
【问题描述】:

我有一个非常基本的 Javascript 函数存储在一个单独的 JS 文件中,它为一个新的 Blazor 应用程序设置页面标题,如下所示:

window.setTitle = (title, icon) => {

    //title
    document.title = title;
    $("#page_title").html(title);

    //page icon
    $("#page_icon").removeClass().addClass('fad fa-' + icon + ' fa-2x');
}

这一切都很好,除了通过浏览器点击应用程序时冷启动。当我尝试访问该站点并且有一段时间没有被访问时,我最终会在控制台中显示以下内容:

Microsoft.JSInterop.JSException: Could not find 'setTitle' ('setTitle' was undefined).
Error: Could not find 'setTitle' ('setTitle' was undefined).
    at https://example.com/_framework/blazor.webassembly.js:1:1287
    at Array.forEach (<anonymous>)
    at e.findFunction (https://example.com/_framework/blazor.webassembly.js:1:1247)
    at b (https://example.com/_framework/blazor.webassembly.js:1:2989)
    at https://example.com/_framework/blazor.webassembly.js:1:3935
    at new Promise (<anonymous>)
    at Object.beginInvokeJSFromDotNet (https://example.com/_framework/blazor.webassembly.js:1:3908)
    at Object.w [as invokeJSFromDotNet] (https://example.com/_framework/blazor.webassembly.js:1:64218)
    at _mono_wasm_invoke_js_blazor (https://example.com/_framework/dotnet.5.0.6.js:1:190800)
    at do_icall (<anonymous>:wasm-function[10596]:0x194e4e)
   at Microsoft.JSInterop.JSRuntime.<InvokeAsync>d__15`1[[System.Object, System.Private.CoreLib, Version=5.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at Microsoft.JSInterop.JSRuntimeExtensions.InvokeVoidAsync(IJSRuntime jsRuntime, String identifier, Object[] args)
   at App.Web.Portal.Client.Shared.PageTitle.OnAfterRenderAsync(Boolean firstRender)
   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle)
d.printErr @ blazor.webassembly.js:1

让我感到困惑的部分是,如果我只是进行硬刷新(CTRL + Shift + R),那么一切都可以完美加载并且运行良好无需任何更改或部署。鉴于此,我真的不知道该怎么做或在哪里寻找如何纠正这个问题。

有没有其他人以前见过这种情况或有任何关于如何防止它的提示?自 2003 年以来我一直在做 .Net,但自 2021 年起我是 Blazor 的新手,所以我学到了很多东西,但这个让我很难过。

提前致谢!

【问题讨论】:

  • 在哪里加载包含setTitle的js文件?
  • 它在 "wwwroot\index.html" 内,并作为标准 JS 文件链接:&lt;script src="assets/js/custom.js"&gt;&lt;/script&gt;,就在结束 &lt;/body&gt; 标记上方 - 这是最后一个链接的脚本文件。
  • 嗨,您在哪里通过 Blazor SPA 中的 JsInterop 呼叫 setTitle?并定义你如何cold restart你的应用程序。
  • 整个应用程序是安全的(意味着除了登录屏幕之外没有公共页面),所以登录是错误所在,但我必须等待/看看它是否再次出现如果堆栈跟踪会告诉我它是从哪里触发的。登录页面本身不使用该功能,因此,当您询问单击了一个灯泡并且现在我很好奇 :-) 关于冷启动时,这仅意味着它是通过 IIS 托管的,并且没有人去过它至少几天,所以 IIS 第一次启动它。一旦我可以再次复制它,就会有更多!

标签: javascript asp.net-core blazor asp.net5


【解决方案1】:

在让我的 Blazor 项目查找 .js 文件时遇到类似问题

以下链接解决了所有问题。但是,在没有代码更改的情况下,它再次开始产生错误; 'methods.saveAsFile 未定义'。

在浏览器上控制 Shift R 以完全重新加载修复了该问题。在这种情况下不是代码。

Could not find property of window when doing JS interop with Blazor

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2021-04-21
  • 2021-09-22
  • 2021-11-23
  • 2020-05-11
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 2022-01-16
  • 2021-04-14
相关资源
最近更新 更多