今天我开始会写出我弄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 滑动不流畅
1、今天遇到了一个顶部跟状态栏重合的状况
TTKL7KT@_%%QG$KWEM11ZUB.png我的解决方案是关闭<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
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 这样的,否则无法加载
- 使用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);
}
我就这样执行操作,它也是能够执行成功的
- 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;
}
}
- 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页面下载了文档, 然后想通过调用原生的方式去打开,结果发现,原生报错了所以解觉原生错误的代码即可
- 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滑动不流畅问题**/
}
网友评论