谢谢大家,已经实现了,重点就是在把调用插件的Webview缓存下来,下次要发消息,就调用这个webview,向他传消息就好了。
参考官方给的插件样例,增加一个init方法。
js端,在官方test.js的PluginTestFunctionSyncArrayArgu 方法后面加上init方法
PluginTestFunctionSyncArrayArgu : function (Argus)
{
return B.execSync(_BARCODE, "PluginTestFunctionSyncArrayArgu", [Argus]);
},
// Android methods
init : function(Argus) {
B.exec(_BARCODE, "init", [Argus]);
}
java端,在官方给的PGPlugintest.java上增加这两个方法
private static IWebview mIWebview;//记录初始化插件的webview
public void init(IWebview webview, String data) {
mIWebview = webview;
startListenerTask();
}
public void sendMsg(String msg){
System.out.println(msg);
String format = "receiveTest(%s);";//填写接收端的方法
final String js = String.format(format, msg);
mIWebview.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mIWebview.loadUrl("javascript:" + js);
}
});
}
其中init方法把请过来的IWebview webview,记录下来,sendMsg里面就是用缓存了的webview发消息。
在html页面,增加些:
mui.plusReady(function() {
//初始插件调用的webview
plus.plugintest.init('aaaaa');
});
//接收插件传过来的消息
function receiveTest(data){
console.log(data)
}
在plusReady里init里一下插件,后台就可以缓存当前的webview了,receiveTest与String format = "receiveTest(%s);";中的方法是对应的。
这样就行了,以后在java端只用调用 sendMsg方法就可以向这个页面传数据,数据会被receiveTest接收。
上面只是写的一个小测试,能实现数据的传输,进一步改装都不再是问题了
根据这个思路,我感觉 应该还有更简单的传数据方法。
比如说
1、可以不可以在后台通过PandoraEntry直接找到主activity,进而找到app的主html的webview
这样就可以直接向主webview发消息,在主webview做接收就好了。
2、官方push就有接收推送消息的办法,plus.push.addEventListener( "receive", function( msg ) {});怎么样写数据,直接让这个receive能收到消息
如果官方有人看到,麻烦指导一下。。。