diff --git a/src/Core/Components/KeyCode/FluentKeyCode.razor.cs b/src/Core/Components/KeyCode/FluentKeyCode.razor.cs index 83e9d1273e..1d7db43a8b 100644 --- a/src/Core/Components/KeyCode/FluentKeyCode.razor.cs +++ b/src/Core/Components/KeyCode/FluentKeyCode.razor.cs @@ -197,7 +197,8 @@ public async ValueTask DisposeAsync() } } catch (Exception ex) when (ex is JSDisconnectedException || - ex is OperationCanceledException) + ex is OperationCanceledException || + ex is JSException) { // The JSRuntime side may routinely be gone already if the reason we're disposing is that // the client disconnected. This is not an error. diff --git a/src/Core/Components/KeyCode/FluentKeyCode.razor.js b/src/Core/Components/KeyCode/FluentKeyCode.razor.js index ae94633a35..c12fb8fa6d 100644 --- a/src/Core/Components/KeyCode/FluentKeyCode.razor.js +++ b/src/Core/Components/KeyCode/FluentKeyCode.razor.js @@ -77,19 +77,24 @@ export function RegisterKeyCode(globalDocument, eventNames, id, elementRef, only } export function UnregisterKeyCode(eventId) { + if (!document.fluentKeyCodeEvents) { + return; + } - if (document.fluentKeyCodeEvents != null) { - const keyEvent = document.fluentKeyCodeEvents[eventId]; - const element = keyEvent.source; + const keyEvent = document.fluentKeyCodeEvents[eventId]; + if (!keyEvent) { + return; + } - if (!!keyEvent.handlerKeydown) { + const element = keyEvent.source; + if (element) { + if (keyEvent.handlerKeydown) { element.removeEventListener("keydown", keyEvent.handlerKeydown); } - - if (!!keyEvent.handlerKeyup) { + if (keyEvent.handlerKeyup) { element.removeEventListener("keyup", keyEvent.handlerKeyup); } - - delete document.fluentKeyCodeEvents[eventId]; } + + delete document.fluentKeyCodeEvents[eventId]; }