谢谢大家,已经实现了,重点就是在把调用插件的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能收到消息
如果官方有人看到,麻烦指导一下。。。
6 个回复
来来去去 (作者)
谢谢大家,已经实现了,重点就是在把调用插件的Webview缓存下来,下次要发消息,就调用这个webview,向他传消息就好了。
参考官方给的插件样例,增加一个init方法。
js端,在官方test.js的PluginTestFunctionSyncArrayArgu 方法后面加上init方法
java端,在官方给的PGPlugintest.java上增加这两个方法
其中init方法把请过来的IWebview webview,记录下来,sendMsg里面就是用缓存了的webview发消息。
在html页面,增加些:
在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能收到消息
如果官方有人看到,麻烦指导一下。。。
赵梦欢 - 专注前端,乐于分享!
可以通过插件的形式写一个监听事件,前端这边监听事件触发。推荐一个可以参考的例子给你看看:https://github.com/jpush/jpush-hbuilder-demo
来来去去 (作者)
这是推送啊。。。。
在同一个app里混合开发
赵梦欢
参考这个写插件。
2017-08-11 09:55
Kapsugar
可以用JQ AJAX来传值
String result="success";
response.setCharacterEncoding("UTF-8");
response.getWriter().write(result);
--------------------前台data接受的就是success这个值了
来来去去 (作者)
谢谢,但你这是服务后台传参代码,我要的是同一个app里的原生与h5的交互
2017-08-11 10:04
Kapsugar
我理解错了?不是服务端向前段传值?不能用JSP之类的?
2017-08-11 10:08
来来去去 (作者)
去看了下极光推送的源码,找到了一些代码
应该是可以用的,我再试试,改装一下
赵梦欢 - 专注前端,乐于分享!
仔细看看我上面发的那个插件的代码:
JS部分:
原生代码里面有调用fireDocumentEvent的地方,仔细看看就可以看到。
java部分: