SuperWebView 记录我遇到的问题解决方案

今天我开始会写出我弄SuperWebView所遇到的问题的解决方案,我会持续更新的

1.顶部跟状态栏重合
2.启动A项目却一直启动的是B项目
3.下拉刷新无法使用
4.模块获取相同的ID是否会错乱
5.superwebView 如何加载外部网址
6.使用execScript(回调) 传递参数
7.html页面之间传递参数
8.div或者其它标签里面,自定义参数字段,然后获取
9.使用api.download下载文件
10.使用函数function函数回调(callBack)传递参数
11.从Activity打开widget文件夹下面某一个Html页面
12.从Activity里面无法找到widget文件夹下面的某一个Html页面
13.使用addEventListener传递参数
14.同一个功能里面含有2个相同的Frame页面,我是否可以共用同一个Frame页面
15.Uncaught Error calling method on NPPobject at JsRuntime:1
16.api.accessNative传递参数给原生
17.dot.js如何传递对象
18.如何获取设备是IOS还是安卓,以及设备型号
19.从竖直的主Activity启动横屏的H5导致APP直接退出
20.APPLoader 加载JS在小米会报xx is not defined 华为和模拟器正常
21.从H5竖屏页面转H5横屏页面,出现崩溃信息
22.api is not defined
23.APICloud Webstorm WiFi日志输出报错:java.io.IOException: Couldn't create PTY
24.Webstorm HTML文件无法拖拽到Webstorm里面打开
25.overflow-y: scroll ios 滑动不流畅
26.api.showProgress没有显示
27.armabi armabi-v7a 选哪个so包放到项目里面
28.api.showProgress 在win界面有时候可以出现加载框,有时候不出现加载框
29.api.showProgress 会被Frame遮挡 BUG???
30.在Win界面api.showProgress,在Frame/Win界面调用api.hideProgress()都会关闭么?
31.backgroundImage 如何加载手机里面的某一张图片?
32.img如何加载手机里面的某一张图片?
33.vue MUI switch 滑块无法滑动
34.如何通过Intent startActivity 传递参数给H5页面(原生主动传递参数给H5)?
35.addEventListener被其它页面覆盖后,还会监听得到么?
36.APICloud加载图片列表项,用户一直往下拉,一直在吃内存怎么解决?
37. 按下homte键后返回APP,先闪现出原生界面,然后才是H5界面
38.启动Activity并加载了A.html,发现api.execScript无法执行
39.模块未绑定

1、今天遇到了一个顶部跟状态栏重合的状况

![TTKL7KT@_%%QGKWEM11ZUB.png](http://upload-images.jianshu.io/upload_images/1945114-4b193c5954bf5674.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 我的解决方案是关闭<preference name= 关闭它,statusBarAppearance 跟 iOS7StatusBarAppearance是一样的知识iOS7StatusBarAppearance只是针对ios 或者你一样开启,然后调用">api.fixStatusBar来解决
官网API如下:
http://docs.apicloud.com/Front-end-Framework/framework-dev-guide#45
2、今天遇到一个问题,我一个Project目录下有很多module,就是我跑A Modle,它总是把B Modle跑起来,后来解决方案是:因为2个项目的config.xml 里面的widget id相同导致的问题

L(`CDFTCU3{RNEHUSHMH9M1.png

3、下拉刷新无法使用
今天遇到一个问题,在首页里面我们含有下拉刷新的控件的,但是IOS切换页面后,再切换回来,就不能下拉刷新了,后来改了api.openFrame bounces为true属性,就可以使用了

4、今天写模块的开发,突然看到一个叫moduleDemo里面的我就想了一个问题
UZResourcesIDFinder.getResIdID("text");这个方法是获取mo_demo_main_activity里面的一个TextView的Id,如果我自定义另外一个layout,
比如名字叫mo_demo_main_hello的layout,当然我不通过UZResourcesIDFinder.getResLayoutID去加载它的mo_demo_main_hello的layout,(mo_demo_main_hello)的layout里面也有一个叫text的TextView,
那么问题来了,我通过UZResourcesIDFinder.getResIdID("text")这个查找到的TextView是哪个里面的?最后根据我的实验,它是找的mo_demo_main_activity里面的TextView,因为我是通过UZResourcesIDFinder.getResLayoutID 去加载mo_demo_main_activity

17.png

5、superwebView 如何加载外部网址
在APP调用浏览器有两种方法:
1.使用openApp
2.使用openWin/openFrame

两种方法调用浏览器后的效果有一点不同:
1.使用openApp调用浏览器后,如果手机内有多个浏览器,会首先弹出选择浏览器的框
2.使用openWin/openFrame,直接打开网页.
openWin:

   api.openWin({
            name : 'win_show2',
            url : 'http://www.baidu.com',
            rect: {
               x: 0,
               y: 0,
               w: ‘auto’,
               h: 'auto'
                }
            })

openFrame:

在apiready里面加入
api.openFrame({
    name: 'biadu',
    url: 'http://www.baidu.com',
    rect: {
        x: 0,
        y: 0,
        w: ‘auto’,
        h: 'auto'
    },
    bounces: true,
    bgColor: 'rgba(0,0,0,0)',
    vScrollBarEnabled: true,
    hScrollBarEnabled: true
});

openApp:

     api.openApp({
        androidPkg : 'android.intent.action.VIEW',
        mimeType : 'text/html',
        uri : 'http://www.baidu.com'
         }, function(ret, err) {     
         });

必须要加入 http或者https 这样的,否则无法加载

  1. 使用execScript(回调) 传递参数
api.execScript({
        name:'root', //这里root代表index.html
        frameName: 'frame_index_me',
        script: 'setData("' + id + '","' + name + '");'
});
 function setData(id, name){
     alert("这是我的id: " + id);
     alert("这是我的name: " + name);
}

上面这段代码是从superwebView论坛里面找到的。
下面是我自己发现的一个

api.execScript({
        name:'root', //这里root代表index.html
        frameName: 'frame_index_me',
        script: 'setData();'
});
 function setData(id, name){
     alert("这是我的id: " + id);
     alert("这是我的name: " + name);
}

我就这样执行操作,它也是能够执行成功的

  1. html页面之间传递参数
 api.openFrame({
        name: 'deliverOrder_list',
        url: '../html/deliverOrder_list.html',
        bounces: false,
        rect: {
            x: 0,
            y: headerHeight,
            w: 'auto',
            h: heightForFrame
        },
        pageParam: {  //这个是用来传递参数的
            coPickNo: coPickNo
        }
    });

获取参数deliverOrder_list.html页面

 if (api.pageParam != null && api.pageParam != '') {
        if (api.pageParam.coPickNo != null && api.pageParam.coPickNo != '') {
            coPickNo = api.pageParam.coPickNo;
        }
    }
  1. div或者其它标签里面,自定义参数字段,然后获取
    自定义参数字段
  {{for(var prop in it) { }}
    
  • {{=it[prop].displayText}}
  • {{}}} //paramValue是我自定义的

    获取自定义参数

    var  erpPtId = $api.attr(this, 'paramValue');
    //this,表示此时被点击的对象,在被点击的对象里面找paramValue
    

    9.使用api.download下载文件

     api.download({
            url: 'xxxx',
            savePath: 'fs://aaaaaaaaaaa.jpg',
            report: false,
            allowResume: false
        }, function (ret, err) {
            if(ret.state==1){
                alert('下载成功');
            }
        });
    

    url:你要下载的地址,不管你下载的文件后缀是.jpg,还是.png,还是.xml,还在.zip格式的,你都需要在savePath:'fs://xxxxxxxx.你要下载的格式',写上你对应的格式

    10.使用函数function函数回调(callBack)传递参数

    ajaxRequest(getTabBarBannerUrl + JSON.stringify(urlParam), 'GET', '', function (ret, err) {
            if (ret) {
                var content = $api.byId('banner-content');
                var tpl = $api.byId('banner-template').text;
                var tempFn = doT.template(tpl);
                content.innerHTML = tempFn(ret[0].banner);
                initSlide();
            } else {
                api.toast({msg: err.msg, location: 'middle'})
            }
        })
    

    ajaxRequest函数:

    function ajaxRequest(url, method, bodyParam, callBack) {
        var common_url = 'https://d.apicloud.com/mcm/api';
        var appId = 'A6963429484030';
        var key = '7F836F04-CAAC-52C8-2332-CF337134FA6F';
        var now = Date.now();
        var appKey = SHA1(appId + "UZ" + key + "UZ" + now) + "." + now;
        api.ajax({
            url: common_url + url,
            method: method,
            cache: false,
            timeout: 20,
            headers: {
                "Content-type": "application/json;charset=UTF-8",
                "X-APICloud-AppId": appId,
                "X-APICloud-AppKey": appKey
            },
            data: {
                body: bodyParam
            }
        }, function (ret, err) {
            callBack(ret, err); //这行是回调的
        });
    }
    

    11.从Activity打开widget文件夹下面某一个Html页面

        Intent intent = new Intent(this, WebPageModule.class);
                //不传递startUrl的情况下,默认走自动加载widget的机制,即:APICloud引擎会自动去解析assets/widget目录下的资源并加载
    //          String url = "file://" + UZUtility.getExternaStoragePath() + "index.html"; 
    //          intent.putExtra("startUrl", "file:///android_asset/widget/index.html");
    //          intent.putExtra("startUrl", url);
                startActivity(intent);
    

    12.从Activity里面无法找到widget文件夹下面的某一个Html页面

     Intent intent = new Intent(this, ContractExecuteHtmlActivity.class);
                        String url = "file:///android_asset/widget/html/purchase.html";
                        intent.putExtra("startUrl",url);
                        startActivity(intent);
    

    我使用这样的方式一直找不到html页面,后来发现,是html页面根本没有编译到apk里面

    13.使用addEventListener传递参数

    //发送广播事件
    api.sendEvent({
        name: 'myEvent',  //要和接收广播参数的对应
        extra: {
            name: '张三',
            age: '18'
        }
    });
    
    //接收广播事件参数
    //html页面a:
    api.addEventListener({
        name: 'myEvent'
    }, function(ret, err) {
        alert(ret.value.name);//打印名字
        alert(ret.value.age);//打印年龄
    });
    

    14.同一个功能里面含有2个相同的Frame页面,我是否可以共用同一个Frame页面
    我告诉你答案是可以的,不过 name要不相同

    //打开frame组页面页面
        api.openFrameGroup({
            name: 'inveneryQueryGroup',
            scrollEnabled: true,
            rect: {
                x: 0,
                y: titleHeaderHeight+nvarHeader,
                w: 'auto',
                h: showHeaderHeight-nvarHeader-footerHeight
            },
            index: 0,//默认显示的默认索引
            frames: [{
                name: 'inventeryQuery_depot_frame_list',           //按仓库
                url: '../html/inventeryQuery_depotVariety_frame_list.html',
                bounces: false,
                vScrollBarEnabled: false,
                hScrollBarEnabled: false,
                pageParam: {
                    erpPtId: erpPtId,
                    status:INVENTERYQUERY_10
                }
            }, {
                name: 'inventeryQuery_Variety_frame_list',          //按品种
                url: '../html/inventeryQuery_depotVariety_frame_list.html',
                bounces: false,
                vScrollBarEnabled: false,
                hScrollBarEnabled: false,
                pageParam: {
                    erpPtId: erpPtId,
                    status:INVENTERYQUERY_20
                }
            }]
        }, function (ret, err) {
            var index = (ret.index);//下标
            var navBarBar = $api.dom('#navBar_receipt_dailyPay .navBar_bar_inner');
            navBarBar.style.webkitTransform = 'translateX(' + index * 100 + '%)';//设置下标蓝色滑动
        });
    

    15.Uncaught Error calling method on NPPobject at JsRuntime:1
    我出现这个问题是我Html页面下载了文档, 然后想通过调用原生的方式去打开,结果发现,原生报错了所以解觉原生错误的代码即可

    1. api.accessNative传递参数给原生
    api.accessNative({
        name: 'showMenu',
        extra: {
            filePath: 'xxx/xxxx/abc.xml'
        }
    }, function(ret, err) {
    });
    

    原生界面获取extra对象

     JSONObject jsonObject =  moduleContext.optJSONObject("extra");
                Log.i(TAG,jsonObject.optString("filePath"));//xxx/xxxx/abc.xml
           //moduleContext是UZModuleContext
    

    17.dot.js如何传递对象

    
    

    注意上面我的{{!JSON.stringify(it)}},这里是将json对象转为字符串

     var attachments = JSON.parse($api.attr(e, 'paramsValue'));
            console.log("对象"+JSON.stringify(attachments[0]));
            console.log("对象"+JSON.stringify(attachments));
    
    dot.js传递对象.png

    18.如何获取设备是IOS还是安卓,以及设备型号

      if(api.systemType=='ios'&&api.deviceModel=='iPhone X'){//如果是苹果X
            $api.fixStatusBar(header);//解决IOSX
        }
    var systemType = api.systemType;  // 比如: ios
    var deviceModel = api.deviceModel;  // 比如: iPhone 5
    

    19.从竖直的主Activity启动横屏的H5导致APP直接退出
    我最近有个需求,我需要从主Activty启动一个横屏的H5,我进入横屏的H5页面后,再点击返回按钮返回主Activity,发现直接退出APP了,没有任何的异常信息错误提示。
    解决办法:
    AndroidManifest.xml

    
     
    
            
    

    ****** 注意:我这里的MainActivity是主页面的(它承载了4个Fragment),然后我启动的VisualizationHtmlActivity呢,是我在fragment点击后需要进入的
    主Activity页面加入
    android:configChanges="orientation|screenSize|keyboardHidden"
    这样就可以防止app走生命周期的销毁流程,如果你要在切换横竖屏幕的时候做一些操作可以加入一些监听

     @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            int mCurrentOrientation = getResources().getConfiguration().orientation;
            if ( mCurrentOrientation == Configuration.ORIENTATION_PORTRAIT ) {
                BAFLogger.i(TAG,"PORTRAIT");
            } else if ( mCurrentOrientation == Configuration.ORIENTATION_LANDSCAPE ) {
                BAFLogger.i(TAG,"LANDSCAPE");
            }
        }
    
    

    总结:哪个页面需要转换屏幕就在哪个页面上添加。
    文献参考
    http://blog.sina.com.cn/s/blog_77c632410101790w.html (讲解横竖生命周期)
    https://blog.csdn.net/michelle0516/article/details/37876325 (讲解关/熄屏幕会多次走生命周期)

    20.APPLoader 加载JS在小米会报xx is not defined 华为和模拟器正常
    这个问题很蛋疼,最开始在官方里面的论坛里面问,他们还是没有给出正解的答案。后面自己乱弄就好了
    首先打开手机SD卡,把UZMap删除,然后用自带的清理工具,清理垃圾,然后重新启动手机,搞定。

    21.从H5竖屏页面转H5横屏页面,出现崩溃信息
    错误信息如下

    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at com.uzmap.pkg.uzcore.UZCoreUtil.hideSoftKeyboard(UZCoreUtil.java:280)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at com.uzmap.pkg.uzcore.t.onVisibilityChanged(UZHybridWindow.java:128)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at android.view.View.dispatchVisibilityChanged(View.java:8778)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at android.view.ViewGroup.dispatchVisibilityChanged(ViewGroup.java:1278)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at android.view.View.setFlags(View.java:9870)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at android.view.View.setVisibility(View.java:6742)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at com.uzmap.pkg.uzcore.t.f(UZHybridWindow.java:1177)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at com.uzmap.pkg.uzcore.p.a(UZHybridWidget.java:521)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at com.uzmap.pkg.uzcore.p.a(UZHybridWidget.java:491)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at com.uzmap.pkg.uzcore.p$2.run(UZHybridWidget.java:324)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at android.os.Handler.handleCallback(Handler.java:815)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:104)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at android.os.Looper.loop(Looper.java:194)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5562)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:968)
    05-16 22:07:42.926 10028-10028/com.gise_gnm.mobile.gkapp W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:763)
    05-16 22:07:42.956 10028-10028/com.gise_gnm.mobile.gkapp W/WebView: setLayerType()
    
    05-16 17:16:22.274 10247-10247/com.gise_gnm.mobile.gkapp W/WebView: setLayerType()
    05-16 17:16:22.305 10247-10247/com.gise_gnm.mobile.gkapp W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 10247
    05-16 17:16:22.614 10247-10247/com.gise_gnm.mobile.gkapp W/cr_AwContents: Application attempted to call on a destroyed WebView
     java.lang.Throwable
    at org.chromium.android_webview.AwContents.isDestroyed(AwContents.java:1256)
    at org.chromium.android_webview.AwContents.isDestroyedOrNoOperation(AwContents.java:1186)
    at org.chromium.android_webview.AwContents.getTitle(AwContents.java:2044)
    at org.chromium.android_webview.AwWebContentsDelegateAdapter.loadingStateChanged(AwWebContentsDelegateAdapter.java:280)
    at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
    at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:41)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5562)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:968)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:763)
    05-16 17:16:22.695 10247-10247/com.gise_gnm.mobile.gkapp W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 10247
    05-16 17:16:22.696 10247-10247/com.gise_gnm.mobile.gkapp W/cr_AwContents: Application attempted to call on a destroyed WebView
    java.lang.Throwable
    at org.chromium.android_webview.AwContents.isDestroyed(AwContents.java:1256)
    at org.chromium.android_webview.AwContents.isDestroyedOrNoOperation(AwContents.java:1186)
    at org.chromium.android_webview.AwContents.getTitle(AwContents.java:2044)
    at org.chromium.android_webview.AwWebContentsDelegateAdapter.loadingStateChanged(AwWebContentsDelegateAdapter.java:280)
    at org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
    at org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:41)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.app.ActivityThread.main(ActivityThread.java:5562)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:968)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:763)
    

    解决办法:
    解决办法其实跟20的一样,哪个页面需要转换屏幕就在哪个页面上添加。

    22.api is not defined
    说明:我这个HTML页面加载了jquery.js进去了的
    我错误的源码

    $(function () {
        if (api.pageParam && api.pageParam != '') {
            if (api.pageParam.item && api.pageParam.item != '') {
                item = api.pageParam.item;
            } else {
                alert("传递的item参数为空");
                closeFrame();
                return;
            }
        } else {
            alert("传递的item参数为空");
            closeFrame();
            return;
        }
      。。。。省略代码
    });
    

    如果我像上面这样写会报这个错误:api is not defined
    正确的写法

    //$(function () {
    apiready = function () {
        if (api.pageParam && api.pageParam != '') {
            if (api.pageParam.item && api.pageParam.item != '') {
                item = api.pageParam.item;
            } else {
                alert("传递的item参数为空");
                closeFrame();
                return;
            }
        } else {
            alert("传递的item参数为空");
            closeFrame();
            return;
        }
          。。。。省略代码
    }
    //});
    

    23.APICloud Webstorm WiFi日志输出报错:java.io.IOException: Couldn't create PTY
    文章转载:
    https://blog.csdn.net/DeMonliuhui/article/details/79777389
    解决方案:
    将cmd路径写完整
    "C:\Windows\System32\cmd.exe" /K "chcp 936 && java -jar C:/APICloud/workspace/wifilog.jar C:/APICloud/workspace/log_info"

    24.Webstorm HTML文件无法拖拽到Webstorm里面打开
    文章转载:http://www.jackxiang.com/post/8725/
    运行中输入regedit,打开注册表编辑器
    在下面的键值:
    HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows > CurrentVersion > Policies > System
    找到EnableLUA将1改成0,然后重启机子。

    25.overflow-y: scroll ios 滑动不流畅
    文章转载:https://blog.csdn.net/dnpao/article/details/76571474
    加入如下规则

    .bigItem-list {
        width: 100%;
        -webkit-overflow-y: scroll;
        overflow-y: scroll;
        -webkit-overflow-scrolling: touch; /**解决IOS滑动不流畅问题**/
    }
    

    26.api.showProgress没有显示
    出现这样的问题,多半是被遮盖导致的,你可以设置延迟300ms,然后再来显示

     setTimeout(function() {
                api.showProgress({
                    title: '加载中',
                    modal: false
                });
            }, 300)
    

    27.armabi armabi-v7a 选哪个so包放到项目里面
    都可以选择其中一个放入即可

    28.api.showProgress 在win界面有时候可以出现加载框,有时候不出现加载框
    解决办法

    api.addEventListener({
        name:'viewappear'
    }, function(ret, err){
        api.showProgress({
            title: '加载中',
            modal: false
    });
    });
    Window 显示到屏幕的事件,字符串类型。收到 viewappear 事件回调,即标识当前 Window 已经动画结束,并且完全显示到屏幕上。
    该事件的作用对象为 Window,Frame 的显示不会收到事件
    

    29.api.showProgress 会被Frame遮挡 BUG???
    原文地址
    解答:api.showProgress是依附于window的,你打开frame,层级高于win,肯定遮盖,这不是一个bug

    30.在Win界面api.showProgress,在Frame/Win界面调用api.hideProgress()都会关闭么?
    不会

    31.backgroundImage 如何加载手机里面的某一张图片?
    格式是: “url('file://”+Android原生路径+"')"
    图片地址:/storage/emulated/0/20180725190152463.jpg

     document.getElementById("fengmian").style.backgroundImage="url('file://"+picObj.bigPic+"')" ;
    

    32.img如何加载手机里面的某一张图片?
    手机图片地址:/storage/emulated/0/20180726202822869.png
    格式是:file://"+Android原生地址+"

    $api.byId('fengmian_pic').src="file://"+picObj.bigPic+"";
    
    请注意:跟上面的backgroundImage加载是有区别的,backgroundImage加载是有 ‘ ’ 这样的符号的,在file位置,img加载是没有的

    33.vue MUI switch 滑块无法滑动
    对于这样的问题,我们要动态的添加swith,然后再初始化mui里面的switch组件

    vm = new Vue({
            el: '#container',
            mounted:function(){
               $api.byId('muiswitchcomment').innerHTML='
    '; var a = this; a.$nextTick(function() { mui('.mui-switch').switch(); }); }, methods: { } });

    就像上面我那样写就可以了,mounted 是VUE在初始化HTML页面完成之后会调用的

    34.如何通过Intent startActivity 传递参数给H5页面(原生主动传递参数给H5)?
    比如我的A是H5页面且是一个详情页面,B是原生的界面,如果我通过A详情页面进入B界面,此时我想点击B界面的详情返回A界面,注意了我这里的返回是再Intent一个A界面出来,此时就是A->B->A这样。我再次启动A界面如何传递给A界面H5参数呢?
    特别提醒:在低版本是无法这样传递参数的,我这个版本是1.3.1,在低版本,你只能通过监听appintent才能获取

           Intent intent = new Intent(this, A.class);
            String url = "file:///android_asset/widget/html/detail.html";
            Bundle bundle = new Bundle();
            bundle.putString("againStatus",MODEL_90);
            bundle.putInt("roldId",roldId);
            intent.putExtras(bundle);
            intent.putExtra("startUrl", url);
            startActivity(intent);
    

    A的H5页面

        roldId = api.pageParam.roldId;
        againStatus = api.pageParam.againStatus;
    

    就这样可以直接拿到值了,现在还有一个问题,第一个A会收到参数么?答案是不会。

    35.addEventListener被其它页面覆盖后,还会监听得到么?
    a.html设置了一次监听事件比如监听loginListener

    a.html
    api.addEventListener({
            name: 'loginListener'
        }, function (ret, err) {
          console.log("1234");
        });
    

    从a.html --->原生界面--->a.html界面,此时第一个a.html已经被覆盖了,我们又从原生界面进入了第二个a.html,此时如果有发出事件被a.html监听到,那么就只有1次log被打印出来,就只有最上面的那个a.html。

    36.APICloud加载图片列表项,用户一直往下拉,一直在吃内存怎么解决?
    怎么用vue.js结合apicloud的api.imageCache实现图片缓存](https://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=50251&highlight=vue%2BimageCache)

    for循环怎么实现imageCache
    (https://community.apicloud.com/bbs/forum.php?mod=viewthread&tid=115914&highlight=imageCache)
    方案一:

    Vue.directive('cacheSrc', function(el, binding) {
                    api.imageCache({
                        url: binding.value,
                        thumbnail: false
                    }, function (ret, err) {
                       if (ret && ret.status) {
                              el.setAttribute("src", ret.url);//这里的目的是替换empty.png的图片
                       }
                    });
    });
    
    html:
       
    

    方案二:

    html:
     
    //注意:v-on:load 必须在src的前面
    
    
    js:
              moveErrorImg: function (event) {
                    event.currentTarget.src = "../image/icon_list_item_empty.png";
                },
              cacheImage:function (event) {
                    var tar = event.currentTarget;
                    var urlPath = $api.attr(tar,"data-url");
                    api.imageCache({
                        url: urlPath,
                    }, function (ret, err) {
                        if (ret && ret.status) {
                            tar.setAttribute("src", ret.url);
                        }
                    });
                }
    

    方案三: 可以解决图片加载一半的问题
    html

     
    
    

    js

      Vue.use(VueLazyload);
        // 或者添加VueLazyload 选项
        Vue.use(VueLazyload, {
            preLoad: 1.3,
            error: '../image/icon_list_item_empty.png',
            loading: '../image/icon_list_item_empty.png',
            attempt: 1
        });
    

    vue_lazy_catch.js下载地址

    1. 按下homte键后返回APP,先闪现出原生界面,然后才是H5界面
      解决办法:app开启硬件加速,widget的config中配置window颜色。不过开启硬件加速有弊端,我是只弄了window颜色

    38.启动Activity并加载了A.html,发现api.execScript无法执行
    当你全新启动一个Activity并加载了A.html,你想执行A.js里面的某个function,然后你使用api.execScript执行对应的function,发现无效果。
    原因:只要你全新启动一个Activity的时候,它的winName默认是root,而不是你想要的WinName名称,所以就无法执行函数。但是IOS却可以指定winName,所以你就只能修改方法了

    39.模块未绑定
    1、确保模块加入到平台里面
    2、打开云编译,生成SDK文件,并且下载文件
    3、替换so包,apiEngine.jar包(平台会将新增加的模块名称放入到apiEngine里面),和新增你刚刚拿到的jar包,
    4、配置config.xml

        
        
    
    模块.png

    你可能感兴趣的:(SuperWebView 记录我遇到的问题解决方案)