When using ASP.NET Core hosted Blazor WebAssembly app it's possible to make use of server prerendering. With this technique first user request is responded to by server instantaneously with full page html. This is useful for SEO and fast content delivery while app is still downloading in the background. Since prerendering happens only on the server with no connection to the browser, it's invalid to call any JS Interop at that time.
- InvalidOperationException: JavaScript interop calls cannot be issued during server-side prerendering,
- because the page has not yet loaded in the browser. Prerendered components must wrap any JavaScript
- interop calls in conditional logic to ensure those interop calls are not attempted during prerendering.
- Blazor.IntersectionObserver.IntersectionObserverService..ctor(IJSRuntime jsRuntime) in IntersectionObserverService.cs
- 27. this.moduleTask = jsRuntime.InvokeAsync<IJSObjectReference>("import", this.scriptPath).AsTask();
Steps to reproduce the behavior:
https://docs.microsoft.com/en-us/aspnet/core/blazor/components/prerendering-and-integration?view=aspnetcore-5.0&pivots=webassembly
Expected behavior
Import JS module only when component is rendered in the browser.
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
if (module == null)
{
module = await JSRuntime.InvokeAsync<IJSObjectReference>("import", "...");
}
}
}
When using ASP.NET Core hosted Blazor WebAssembly app it's possible to make use of server prerendering. With this technique first user request is responded to by server instantaneously with full page html. This is useful for SEO and fast content delivery while app is still downloading in the background. Since prerendering happens only on the server with no connection to the browser, it's invalid to call any JS Interop at that time.
Steps to reproduce the behavior:
https://docs.microsoft.com/en-us/aspnet/core/blazor/components/prerendering-and-integration?view=aspnetcore-5.0&pivots=webassembly
Expected behavior
Import JS module only when component is rendered in the browser.