Use custom events to work around Native -> WebView JS execution limitations