Blazor Webassembly 可以通过JavaScript Interop与JavaScript通信。想要检测浏览器窗口状态的变化,可以使用JavaScript来获取窗口的visibility状态,再将值传递给Blazor。下面是一个示例:
JavaScript代码:
//get the window visibility status
function getWindowStatus() {
return document.visibilityState;
}
//listen for changes to the window visibility status
document.addEventListener('visibilitychange', function () {
//call C# method through JavaScript Interop
DotNet.invokeMethodAsync('BlazorApp', 'OnWindowVisibilityChanged', getWindowStatus());
});
在Blazor代码中,需要在调用JavaScript之前定义好对应的JavaScript函数:
@inject IJSRuntime JSRuntime
@code {
protected override async Task OnInitializedAsync()
{
//register JavaScript function with Blazor
await JSRuntime.InvokeVoidAsync("registerWindowStatus", DotNetObjectReference.Create(this));
}
//called by JavaScript function through JavaScript Interop
[JSInvokable]
public async Task OnWindowVisibilityChanged(string status)
{
//do something with window visibility status
}
}