ComponentInstance: handle iframe changes #3015
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
If a ComponentInstance is reordered in the DOM - which can happen as the result of a script re-run - its iframe will be re-mounted, and get a new
contentWindow. A Component sends messages to Streamlit via itscontentWindow-- and since we currently don't detect a change tocontentWindow, a remounted Component iframe will send messages that just get dropped on the floor byComponentRegistry.This PR detects
contentWindowchanges during component update and re-registers the component's message listener.(Most of the hard work of discovery, making a repro-able test case, and finding the solution is thanks to @erumoico: https://github.com/erumoico/streamlit-issue_2720)
Fixes #2720