* Add support for dynamic message handlers
* Pass messages using crossFrame.invoke instead of contentWindow.postMessage
* Set up async handlers
* Simplify configure call and response
* Remove bindings
* Fast exit if same window
* Simplify selector
* Rename functions, reuse _getFrameOffsetParent
* Update message style
* Send reply message to a specific frame
* Create FrameClient and FrameEndpoint
* Use new Frame* classes for Popup=>frame connection
* Update api.sendMessageToFrame and api.broadcastTab to include the sender's frameId
* Update FrameClient to store the frame's frameId
* Change getOrCreatePopup arguments to be an object
* Add ownerFrameId to popup and DisplayFloat
* Refactor DisplayFloat host action invocation
* Use CrossFrameAPI instead of window.postMessage
* Update popup closing functionality on the search page
* Organize by public/private
* Don't access super class's private members
* Make _autoPlayAudioTimer private
* Refactor constructors
* Make functions private
* Organize by public/private
* Organize window message handlers
* Make fields private
* Refactor DisplaySearch constructor
* Make functions private
* Organize by public/private
* Remove statics
* Move orphan detection and error handling to Display
* Add clearContent function
* Add/use public get/set functions for optionsContext
* Add public getOptions
* Move interactive assignment
* Mark fields as private
* Mark functions as private
* Change stray getter into a function
* Add page exit prevention functionality to SettingsController
* Update dictionary controller to use new page exit prevention system
* Remove page-exit-prevention.js
* Add clone function
* Replace utilIsolate with clone
* Replace JsonSchema.isolate with clone function
* Include core.js for tests which use json-schema.js
* Update visisted set
* Move "yomichan" object setup to a separate file
* Update script imports
* Align message handlers
* Rename Yomichan.prepare to Yomichan.ready
* Add new prepare function
* Improve isExtensionUrl
* Add support for injecting stylesheets into a custom parent node
* Add api.getStylesheetContent
* Add support for injecting a CSS file's content
* Add usePopupShadowDom option
* Use a per-parentNode cache
* Add support for using a shadow DOM wrapper around popup iframes
* Ignore the popup container instead of the frame
* Create member functions for ignoreElements and ignorePoint
* Create addFullscreenChangeEventListener utility
* Move popup creation management into Frontend
* Move getUrl implementation
* Remove old setup
* Remove try/catch block
* Error wrap
* Add prepare call to TextScanner
* Update depth when popup changes
* Refactor how Frontend gets PopupFactory and frameId
* Update popup preview to work
* Update popup preview frame to use the frontend's popup
* Update how nested popups are set up
* Error wrap
* Update how popups are set up on the search page
* Error wrap
* Error unwrap
* Add missing prepare
* Remove use of frontendInitializationData
* Catch and log errors
* Update test
* Rename db to _db
* Create GenericDatabase class
* Catch prepare error
* Allow database to be purged even if it was not open
* Remove unused functions
* Change static functions to non-static
* Delete and count using the media object store
* Update tests
* Add link to the help button
* Update context.html to not use bootstrap
Styles moved into a separate file
Update icons
* Update terminology to correspond to new icons
* Convert handlebars.js to a class
* Move/rename function
* Update helper registration
* Rename helper functions
* Limit cache size
* Make render() async
* Rename and move
* Remove setDisabled member; replace with an event
* Pass frameOffsetForwarder directly to PopupProxy
* Replace .start with .prepare
* Make onMessage private
* Make message safer and handle unexpected inputs