我在Android上使用原生插件(其他平台)有一个Cordova应用程序。
我的插件是在应用程序启动时加载的(在plugin.xml中为<param name="onload" value="true" />
),而我的本机代码在initialize
方法中有一些工作(从CordovaPlugin
类重载)。
基本上,我在initialize
方法中所做的工作会导致事件稍后生成,我需要将此事件传递给javascript API。
有没有什么方法可以从插件的本机端异步调用javascript,而没有先从javascript端调用插件? (来自JS-&gt; Java的调用会给我一个CallbackContext,我可以使用它来发出回调,我假设。)
我找到了这个 https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/NativeToJsMessageQueue.java 但我不知道如何使用它,我找不到任何文件 - 我甚至不确定它是否有效或是否供公众使用。我可以使用webview.loadUrl("javascript: ... ");
来调用javascript端,还是会破坏或干扰JS中运行的cordova框架(如果有的话)?
是否有推荐的方法来实现这一点,是否支持多个平台(或者是适用于其他平台的概念?)
由于
答案 0 :(得分:0)
目前我正在使用一种解决方法 - 我让用户调用我的插件(JS-&gt; java),这样他们就会提供他们正在注册的回调函数。
在Java方面,我随后存储CallbackContext
以供日后使用。
重要的是,当您使用CallbackContext.sendPluginResult
时,您传递的PluginResult
必须使用PluginResult.setKeepCallback(true)
方法标记,否则第一次回调CallbackContext将导致非常重要上下文对未来的电话无效。
我没有注意到任何线程问题,我不确定(但有希望)它适用于其他平台。