Uploaded image for project: 'Apache Cordova'
  1. Apache Cordova
  2. CB-11292

calling loadUrl more than once breaks messageChannel

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: cordova-android
    • Labels:
      None

      Description

      CordovaWebViewImpl.sendJavascriptEvent caches a reference to the CoreAndroid plugin instance. This plugin manages Cordova's messageChannel. One of the things messageChannel is used for is sending system events from native to JS, for example backbutton events.

      By default, CordovaWebViewImpl.loadUrl unloads all plugins. This has the side effect of rendering CordovaWebViewImpl's cached instance of CoreAndroid stale. That is, a new instance is created and bound to a new messageChannel callback.

      After this happens, when CordovaWebViewImpl sends messages to JS, the callback id has changed and the messages are not handled.

      There are at least 2 approaches that should fix this.
      1. (tested) do not cache the CoreAndroid instance. If CordovaWebViewImpl.sendJavascriptEvent gets the reference from PluginManager every time, it will not become stale.
      2. (not tested, but better encapsulated) when plugins are recreated, clear the cached reference

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                bowserj Joe Bowser
                Reporter:
                tony-- Tony Homer
              • Votes:
                0 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: