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" value="false"/> 关闭它,statusBarAppearance 跟 iOS7StatusBarAppearance是一样的知识iOS7StatusBarAppearance只是针对ios 或者你一样开启<preference name="statusBarAppearance" value="true"/>,然后调用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) { }}
    <li paramValue="{{=it[prop].erpPtId}}">{{=it[prop].displayText}}</li>
    {{}}}
//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如何传递对象

<script type="text/template" id="fujian_ul_template">
    {{for(var prop in it) { }}
    <li fileIdValue="{{=it[prop].fileId}}" ptIdValue="{{=it[prop].ptId}}" paramsValue='{{!JSON.stringify(it)}}' onclick="fnDownFile(this)">
        <p class="fileName">
            <a>
            {{? it[prop].fileName}}
              {{=it[prop].fileName}}
            {{}}}
            </a>
        </p>
    </li>
    {{}}}
</script>

注意上面我的{{!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

<!--主Activity-->
 <activity
            android:name="xxxxxxxxxxx.activity.MainActivity"
            android:label="@string/title_activity_main"
            android:logo="@drawable/icon_application"
            android:screenOrientation="portrait"
            android:configChanges="orientation|screenSize|keyboardHidden"
            android:theme="@style/Baf.Theme.NoTitleBar"
            android:windowSoftInputMode="adjustPan"/>
<!--横屏的H5,因为HTML是承载在activity上面的-->
        <activity android:name=".business.activity.VisualizationHtmlActivity"
            android:screenOrientation="landscape"
            android:theme="@style/H5StyleNotitle"/>

****** 注意:我这里的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='<div class="mui-switch mui-switch-mini"><div class="mui-switch-handle"></div></div>';
           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:
   <img src="../../image/default.jpg" v-cache-src="真实图片">

方案二:

html:
 <img  v-on:load="cacheImage($event)"  :data-url="item.HeadPhoto"   v-on:error.once="moveErrorImg($event)" src="../image/icon_list_item_empty.png" class="userheader" v-cloak>
//注意: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

 <img  v-lazy="item.HeadPhoto"  class="userheader" v-cloak>
<script type="text/javascript" src="../script/libscript/vue_lazy_catch.js"></script>

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

    <!--模块名字-->
    <preference name="customRefreshHeader" value="模块名称,此处不可以错误,错误就无法正常使用"/>
模块.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,401评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,350评论 0 17
  • 上周有条新闻,让表妹的心脏遭到一万点暴击。 没错,你可能已经猜到是啥—— 她老公(之一)抖森,跟别人跑了。 心碎的...
    Sir电影阅读 4,877评论 18 114
  • 我追随,你遗忘,到最后,谁也不记得谁,留时光空想,留记忆泛黄。 雨落入凡尘,风飘散人间,迷失了的心,轮回几世,亦是...
    凌晨chen阅读 218评论 2 1