a15965734368
a15965734368
  • 发布:2017-04-16 16:52
  • 更新:2017-04-22 10:52
  • 阅读:3520

混合开发webview集成方式和原生页面的通信问题!

分类:5+ SDK

问题一:在创建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_骁骑

2017-04-16 16:52 负责人:无 分享
已邀请:
a15965734368

a15965734368 (作者)

已解决,解决方案:使用Android原生的与webview通信方式,具体参见Android混合开发之WebView与Javascript交互

使用方法:先用5+创建一个webview,然后用5+的obtainWebview()方法获取到系统webview对象,然后如何创建监听之类的可以参见上面的的链接,这样既可以原生与js互调也可以使用5+的一些方法。

优点是:不用plus初始化就可调用Android的方法
缺点:是不是有点舍近求远了?

关于页面跳转:只能用a链接href跳转了.....url传参,虽然体验差了一点。。。。

遇到的其他问题:
通知栏背景颜色变成粉色:从原生代码里面设置成沉浸式,并修改html页面header的样式,我直接padding-top:21px;

会切换到横屏:在plus初始化之后调用plus.screen.lockOrientation("portrait-secondary");就不会再切换到横屏了  

a连接跳转方式plusReady只执行一次:只需要在入口页面初始化一次即可,其他页面直接使用plus就可以了,但是单webview下拉刷新方式就不能用了,因为你入口页面设置了下拉刷新,其他页面你即使不设置他也会执行的~

该问题目前已经被锁定, 无法添加新回复