问题一:在创建webview的时候如何附带数据?
官方5+ SDK api里面的IWebView类里面有两个方法:
- setWebViewEvent(java.lang.String pDataType, java.lang.Object obj) //设置数据给Webview
- setWebviewProperty(java.lang.String key, java.lang.String value) //设置webview指定的key属性值
以下是Android代码:
public void onCoreInitEnd(ICore coreHandler) {
// 设置单页面集成的appid
String appid = "TestAppid";
// 单页面集成时要加载页面的路径,可以是本地文件路径也可以是网络路径
String url = "file:///android_asset/apps/H5Plugin/www/index.html";
webview = SDK.createWebview(activity, url, appid, new IWebviewStateListener() {
@Override
public Object onCallBack(int pType, Object pArgs) {
switch (pType) {
case IWebviewStateListener.ON_WEBVIEW_READY:
// 准备完毕之后添加webview到显示父View中,设置排版不显示状态,避免显示webview时,html内容排版错乱问题
((IWebview) pArgs).obtainFrameView().obtainMainView().setVisibility(View.INVISIBLE);
SDK.attach(mRootView, ((IWebview) pArgs));
break;
case IWebviewStateListener.ON_PAGE_STARTED:
// 首页面开始加载事件
break;
case IWebviewStateListener.ON_PROGRESS_CHANGED:
// 首页面加载进度变化
break;
case IWebviewStateListener.ON_PAGE_FINISHED:
// 页面加载完毕,设置显示webview
webview.obtainFrameView().obtainMainView().setVisibility(View.VISIBLE);
//下面的这句就是往webview传参,两个方法都尝试了,位置放到显示webview代码之前也不行
webview.setWebViewEvent("testName","10086");
break;
}
return null;
}
});
下面是JS获取参数的代码,当然是在plus初始化之后调用的
plus.webview.currentWebview().testName
第一个问题到此为止,这也是最迫切需要解决的问题。。。
问题二:以webview集成方式js里面调用 plus.webview.create 创建一个新的webview无效。。。
如果5+ SDK不支持我上述的创建方法,那么页面之间的跳转可以用a标签代替,那么问题来了,返回键的监听函数应该如何判断,是在js里面重写back方法还是在Android里面来重写监听方法?
问题三:能否让5+创建的webview和原生的一些view在同一个activity显示,或者是Fragment的方式实现?
这个问题论坛里面很少有人问到,即使问了也没有啥有建设性的方案,求官方给个具体的教程吧。官方的5+SDK API真是不想吐槽了,看来官方的主要方向还是在webapp上面,混合开发的资料都很少....
最后还是求官方出个加载通信和实时通信的教程吧@五块钱的果汁、@DCloud_SDK_骁骑
1 个回复
a15965734368 (作者)
已解决,解决方案:使用Android原生的与webview通信方式,具体参见Android混合开发之WebView与Javascript交互
使用方法:先用5+创建一个webview,然后用5+的obtainWebview()方法获取到系统webview对象,然后如何创建监听之类的可以参见上面的的链接,这样既可以原生与js互调也可以使用5+的一些方法。
优点是:不用plus初始化就可调用Android的方法
缺点:是不是有点舍近求远了?
关于页面跳转:只能用a链接href跳转了.....url传参,虽然体验差了一点。。。。
遇到的其他问题:
通知栏背景颜色变成粉色:从原生代码里面设置成沉浸式,并修改html页面header的样式,我直接padding-top:21px;