Skip to content

fix(cdk/overlay): guard against null document.body before popover support check#33403

Open
arturovt wants to merge 1 commit into
angular:mainfrom
arturovt:fix/cdk_overlay_bodyCanBeNull
Open

fix(cdk/overlay): guard against null document.body before popover support check#33403
arturovt wants to merge 1 commit into
angular:mainfrom
arturovt:fix/cdk_overlay_bodyCanBeNull

Conversation

@arturovt

Copy link
Copy Markdown
Contributor

The WHATWG spec allows document.body to be null when the document element is not or has no / child, which can happen during page navigation or unload cycles. Using the 'in' operator against null throws "Cannot use 'in' operator to search for 'showPopover' in null".

TypeScript types document.body as non-nullable HTMLElement so the issue is invisible at compile time but surfaces at runtime in edge cases. Creating a minimal reproduction is impractical, as the issue occurs during edge cases in page navigation/unload cycles in a large application.

Added a null check before the 'in' expression so that when document.body is unavailable, usePopover falls back to false — the same result as when the browser doesn't support the Popover API at all.

Spec: https://html.spec.whatwg.org/multipage/dom.html#dom-document-body
Related: microsoft/TypeScript#50078

…port check

The WHATWG spec allows document.body to be null when the document element
is not <html> or has no <body>/<frameset> child, which can happen during
page navigation or unload cycles. Using the 'in' operator against null
throws "Cannot use 'in' operator to search for 'showPopover' in null".

TypeScript types document.body as non-nullable HTMLElement so the issue
is invisible at compile time but surfaces at runtime in edge cases.
Creating a minimal reproduction is impractical, as the issue occurs
during edge cases in page navigation/unload cycles in a large application.

Added a null check before the 'in' expression so that when document.body
is unavailable, usePopover falls back to false — the same result as when
the browser doesn't support the Popover API at all.

Spec: https://html.spec.whatwg.org/multipage/dom.html#dom-document-body
Related: microsoft/TypeScript#50078
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant