完全渲染后 blazor 中的 window.status

时间:2021-01-07 09:25:52

标签: javascript blazor blazor-client-side blazor-webassembly

我想写 'window.status="已完成"' 当 Blazor 页面在后面的代码中完全加载时。

我对 JS 了解很少。

2 个答案:

答案 0 :(得分:1)

window.status 不再支持浏览器,已弃用,因此不应使用。

阅读以下链接中的弃用详细信息:

  1. https://github.com/mdn/browser-compat-data/pull/7383
  2. https://caniuse.com/mdn-api_window_status
  3. https://www.w3schools.com/jsref/prop_win_status.asp

enter image description here

答案 1 :(得分:0)

Blazor为您提供了与DOM互动巨大的机遇,而在大多数情况下,JavaScript是不是必须的了。不幸的是,在你的情况,我们不能“达到”的窗口。它是在层次太高。我们需要使用JavaScript互操作。

的第一步是建立一个JavaScript文件和包括其作为一个index.html的链接,如果使用的是WASM或Host.cshtml用于服务器端Blazor。或者,可以在文档中嵌入它。

forPage

这是一个很好的做法,让您的脚本自己的命名空间。这是<script type="text/javascript"> myAppNamespace.setCompleteStatus= function (status) { document.status = status; }; </script> 在之前的例子中Blazor将需要这些信息来调用正确的函数。

在您的组件应该触发此操作中,注入的JavaScript互操作的服务。

myAppNamespace

每个Blazor组件具有与根据它的状态中执行不同方法的生命周期。所有的渲染完成后执行的方法@inject IJSRuntime jsruntime 。您可以覆盖它并执行你的JavaScript。

OnAfterRenderAsync

正如其名称所建议的 protected async override Task OnAfterRenderAsync(bool firstRender) { await base.OnAfterRenderAsync(firstRender); if(firstRender == true) { await jsruntime.InvokeVoidAsync("myAppNamespace.setCompleteStatus", "insert status here"); } } 仅一旦组件被添加到DOM设置为true。如果你需要的状态多次改变,你可以删除的条件。请注意在这个方法调用变化firstRender,以及