diff --git a/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Streaming.cs b/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Streaming.cs index ac6d24419895..50728a8c3271 100644 --- a/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Streaming.cs +++ b/src/Components/Endpoints/src/Rendering/EndpointHtmlRenderer.Streaming.cs @@ -324,7 +324,7 @@ private void WriteComponentHtml(int componentId, TextWriter output, bool allowBo } } - private static bool IsProgressivelyEnhancedNavigation(HttpRequest request) + internal static bool IsProgressivelyEnhancedNavigation(HttpRequest request) { // For enhanced nav, the Blazor JS code controls the "accept" header precisely, so we can be very specific about the format var accept = request.Headers.Accept; diff --git a/src/Components/Endpoints/src/Rendering/SSRRenderModeBoundary.cs b/src/Components/Endpoints/src/Rendering/SSRRenderModeBoundary.cs index e9930ea24991..1febaa8f4af5 100644 --- a/src/Components/Endpoints/src/Rendering/SSRRenderModeBoundary.cs +++ b/src/Components/Endpoints/src/Rendering/SSRRenderModeBoundary.cs @@ -124,6 +124,11 @@ public Task SetParametersAsync(ParameterView parameters) private void PreloadWebAssemblyAssets() { + if (EndpointHtmlRenderer.IsProgressivelyEnhancedNavigation(_httpContext.Request)) + { + return; + } + var preloads = _httpContext.GetEndpoint()?.Metadata.GetMetadata(); if (preloads != null && preloads.TryGetAssets("webassembly", out var preloadAssets)) { diff --git a/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts b/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts index 2707f3755a63..b86ff3bd8d03 100644 --- a/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts +++ b/src/Components/Web.JS/src/Rendering/DomMerging/DomSync.ts @@ -308,11 +308,6 @@ function domNodeComparer(a: Node, b: Node): UpdateCost { return UpdateCost.Infinite; } - // Always treat "preloads" as new elements. - if (isPreloadElement(a as Element) || isPreloadElement(b as Element)) { - return UpdateCost.Infinite; - } - return UpdateCost.None; case Node.DOCUMENT_TYPE_NODE: // It's invalid to insert or delete doctype, and we have no use case for doing that. So just skip such @@ -324,10 +319,6 @@ function domNodeComparer(a: Node, b: Node): UpdateCost { } } -function isPreloadElement(el: Element): boolean { - return el.tagName === 'LINK' && el.attributes.getNamedItem('rel')?.value === 'preload'; -} - function upgradeComponentCommentsToLogicalRootComments(root: Node): ComponentDescriptor[] { const serverDescriptors = discoverComponents(root, 'server') as ServerComponentDescriptor[]; const webAssemblyDescriptors = discoverComponents(root, 'webassembly') as WebAssemblyComponentDescriptor[];