
h.js 发布了!!开源、永久免费!致力于优化mui的dom操,解决mui不提供dom操作的小遗憾,完美兼容mui,开启更高效的开发。

h.js 发布了!!开源、永久免费!
h.js - dom 操作的小伙伴,极小 超快!
致力于优化mui的dom操,解决mui不提供dom操作的小遗憾,完美兼容mui,开启更高效的开发。
8k的js 极小、极快。
视频教程已经录制完毕 60分钟成为dom操作老司机! jQuery老司机直接上车!
官网 http://www.hcoder.net/h
希望大家帮忙顶贴 支持一下 谢谢了, 希望官方给个支持 谢谢
h.js 发布了!!开源、永久免费!
h.js - dom 操作的小伙伴,极小 超快!
致力于优化mui的dom操,解决mui不提供dom操作的小遗憾,完美兼容mui,开启更高效的开发。
8k的js 极小、极快。
视频教程已经录制完毕 60分钟成为dom操作老司机! jQuery老司机直接上车!
官网 http://www.hcoder.net/h
希望大家帮忙顶贴 支持一下 谢谢了, 希望官方给个支持 谢谢
收起阅读 »
提交苹果App store审核强制要求ATS,及访问非HTTPS服务器地址导致文件下载、上传、ajax无法正常工作 的问题
云打包已默认关闭ATS,无需在进行关闭配置, 如果应用完全支持https可以使用文章中的方法确保应用通讯的数据安全
iOS从9.0版本开始添加了对应用数据传输的安全性要求(ATS),为了保证向下兼容HBuilder云端打包做了统一配置应用关闭ATS限制开关。目前从公开的消息是从2017年开始App store审核将加强关闭ATS应用的审核(具体情况暂时还不明确,预计可能会导致应用无法通过审核)。
实际上苹果对应用的ATS是分等级控制,可以全局关闭ATS限制,也可对Webview访问资源关闭ATS限制,也可对特定的域名进行ATS策略控制(指定特定域名不受ATS限制),详情可参考网上资料(http://www.jianshu.com/p/36ddc5b009a7)。
为了避免关闭ATS限制导致应用无法通过审核的问题,HBuilder云端打包将调整默认策略为开启ATS限制(Alpha打包机从2016-12-29日开始,正式打包机计划从2017-1-1日开始),并添加以下配置策略:
- 关闭通过webview 发出的网络请求的ATS限制(Webview对象可以访问http资源);
- 关闭载入任意本地资源ATS限制(第三方SDK访问本地资源)。
如果开启ATS后,iOS9以下需要做兼容处理.,可通过判断系统版本请求不同的地址(plus.os.version)
调整默认配置后对普通5+应用运行不会有影响,在Webview中仍然可以访问http资源,但是以下5+ API请求的服务器地址必需符合ATS规范(使用https),影响的模块如下:
- Downloader(文件下载),影响API范围:plus.downloader.*;
- Uploader(文件上传),影响API范围:plus.uploader.*;
- XMLHtttpRequest(跨域网络连接),影响API:plus.new.XMLHttpRequest。
如果应用中使用了以上5+ API访问非https服务器地址,将会导致无法正常工作,推荐将服务器地址修改为https来解决,也可以使用下面的指定特定域名关闭ATS限制方法来配置允许http访问特定域名。
如果应用需要自定义ATS策略,可通过以下方法修改:
设置全局关闭ATS限制
在manifest.json的“plus->distribute->apple”节点下添加plistcmds数据如下:
"plistcmds":["Add :NSAppTransportSecurity:NSAllowsArbitraryLoads bool true"]
如果应用完全支持https(请使用ATS检测工具测试地址是否满足 ATS 特性),可使用以下方法设置Webview开启ATS限制及载入本地资源ATS限制
对于服务器已经完全支持https的应用,推荐配置这种策略,可确保应用通讯的数据安全。
在manifest.json的“plus->distribute->apple”节点下添加plistcmds数据如下:
"plistcmds":["Set :NSAppTransportSecurity:NSAllowsArbitraryLoadsInWebContent NO",
"Set :NSAppTransportSecurity:NSAllowsLocalNetworking NO"
]
指定特定域名关闭ATS限制
特定域名关闭ATS限制后可以通过http访问服务器,可能需要开发者提交App store审查时说明原因。
在manifest.json的“plus->distribute->apple”节点下添加plistcmds数据如下:
"plistcmds":["Add :NSAppTransportSecurity:NSExceptionDomains dict ",
"Add :NSAppTransportSecurity:NSExceptionDomains:qq.com dict ", // 指定允许不使用ATS访问qq.com域名
"Add :NSAppTransportSecurity:NSExceptionDomains:qq.com:NSIncludesSubdomains bool true",
"Add :NSAppTransportSecurity:NSExceptionDomains:qq.com:NSExceptionAllowsInsecureHTTPLoads bool true",
"Add :NSAppTransportSecurity:NSExceptionDomains:dcloud.net.cn dict ", // 指定允许不使用ATS访问dcloud.net.cn域名
"Add :NSAppTransportSecurity:NSExceptionDomains:dcloud.net.cn:NSIncludesSubdomains bool true",
"Add :NSAppTransportSecurity:NSExceptionDomains:dcloud.net.cn:NSExceptionAllowsInsecureHTTPLoads bool true"
]
云打包后生效
真机调试基座默认关闭ATS,但HBuilder (7.6.5)是开启的,需要使用此基座替换使用https://pan.baidu.com/s/1qXZD9SS其他低版本不受影响
目前还不能确定从2017年开始App store审核对于ATS要求的准确细则,有碰到相关问题导致审核失败的开发者可以反馈问题,我们将尽快跟进处理
云打包已默认关闭ATS,无需在进行关闭配置, 如果应用完全支持https可以使用文章中的方法确保应用通讯的数据安全
iOS从9.0版本开始添加了对应用数据传输的安全性要求(ATS),为了保证向下兼容HBuilder云端打包做了统一配置应用关闭ATS限制开关。目前从公开的消息是从2017年开始App store审核将加强关闭ATS应用的审核(具体情况暂时还不明确,预计可能会导致应用无法通过审核)。
实际上苹果对应用的ATS是分等级控制,可以全局关闭ATS限制,也可对Webview访问资源关闭ATS限制,也可对特定的域名进行ATS策略控制(指定特定域名不受ATS限制),详情可参考网上资料(http://www.jianshu.com/p/36ddc5b009a7)。
为了避免关闭ATS限制导致应用无法通过审核的问题,HBuilder云端打包将调整默认策略为开启ATS限制(Alpha打包机从2016-12-29日开始,正式打包机计划从2017-1-1日开始),并添加以下配置策略:
- 关闭通过webview 发出的网络请求的ATS限制(Webview对象可以访问http资源);
- 关闭载入任意本地资源ATS限制(第三方SDK访问本地资源)。
如果开启ATS后,iOS9以下需要做兼容处理.,可通过判断系统版本请求不同的地址(plus.os.version)
调整默认配置后对普通5+应用运行不会有影响,在Webview中仍然可以访问http资源,但是以下5+ API请求的服务器地址必需符合ATS规范(使用https),影响的模块如下:
- Downloader(文件下载),影响API范围:plus.downloader.*;
- Uploader(文件上传),影响API范围:plus.uploader.*;
- XMLHtttpRequest(跨域网络连接),影响API:plus.new.XMLHttpRequest。
如果应用中使用了以上5+ API访问非https服务器地址,将会导致无法正常工作,推荐将服务器地址修改为https来解决,也可以使用下面的指定特定域名关闭ATS限制方法来配置允许http访问特定域名。
如果应用需要自定义ATS策略,可通过以下方法修改:
设置全局关闭ATS限制
在manifest.json的“plus->distribute->apple”节点下添加plistcmds数据如下:
"plistcmds":["Add :NSAppTransportSecurity:NSAllowsArbitraryLoads bool true"]
如果应用完全支持https(请使用ATS检测工具测试地址是否满足 ATS 特性),可使用以下方法设置Webview开启ATS限制及载入本地资源ATS限制
对于服务器已经完全支持https的应用,推荐配置这种策略,可确保应用通讯的数据安全。
在manifest.json的“plus->distribute->apple”节点下添加plistcmds数据如下:
"plistcmds":["Set :NSAppTransportSecurity:NSAllowsArbitraryLoadsInWebContent NO",
"Set :NSAppTransportSecurity:NSAllowsLocalNetworking NO"
]
指定特定域名关闭ATS限制
特定域名关闭ATS限制后可以通过http访问服务器,可能需要开发者提交App store审查时说明原因。
在manifest.json的“plus->distribute->apple”节点下添加plistcmds数据如下:
"plistcmds":["Add :NSAppTransportSecurity:NSExceptionDomains dict ",
"Add :NSAppTransportSecurity:NSExceptionDomains:qq.com dict ", // 指定允许不使用ATS访问qq.com域名
"Add :NSAppTransportSecurity:NSExceptionDomains:qq.com:NSIncludesSubdomains bool true",
"Add :NSAppTransportSecurity:NSExceptionDomains:qq.com:NSExceptionAllowsInsecureHTTPLoads bool true",
"Add :NSAppTransportSecurity:NSExceptionDomains:dcloud.net.cn dict ", // 指定允许不使用ATS访问dcloud.net.cn域名
"Add :NSAppTransportSecurity:NSExceptionDomains:dcloud.net.cn:NSIncludesSubdomains bool true",
"Add :NSAppTransportSecurity:NSExceptionDomains:dcloud.net.cn:NSExceptionAllowsInsecureHTTPLoads bool true"
]
云打包后生效
真机调试基座默认关闭ATS,但HBuilder (7.6.5)是开启的,需要使用此基座替换使用https://pan.baidu.com/s/1qXZD9SS其他低版本不受影响
目前还不能确定从2017年开始App store审核对于ATS要求的准确细则,有碰到相关问题导致审核失败的开发者可以反馈问题,我们将尽快跟进处理
收起阅读 »
福利来了 h5+ app开发视频教程资源汇总
app 开发视频教程汇总及近期更新
《APP开发教程 - 启动动画》
《APP开发实例教程 - 窗口切换》
《移动端图片剪裁、上传视频教程》
《app开发教程-用户注册、登录》
《APP开发实战 - 新闻客户端》
《HTML5 plus 开发教程》
《MUI 视频教程 》
网址: http://www.hcoder.net/course
app 开发视频教程汇总及近期更新
《APP开发教程 - 启动动画》
《APP开发实例教程 - 窗口切换》
《移动端图片剪裁、上传视频教程》
《app开发教程-用户注册、登录》
《APP开发实战 - 新闻客户端》
《HTML5 plus 开发教程》
《MUI 视频教程 》
网址: http://www.hcoder.net/course

有关安卓webview模式下拉刷新只能拉一半(盖住提示文本)问题解决
类似这个问题http://ask.dcloud.net.cn/question/27036
方法就是在根页面创建子webview的时候要隐藏的子webview延时10ms隐藏就可以了
<nav class="mui-bar mui-bar-tab">
<a id="defaultTab" class="mui-tab-item mui-active" href="first_index.html">
<span class="mui-icon iconfont icon-home"></span>
<span class="mui-tab-label">首页</span>
</a>
<a class="mui-tab-item" href="circle_index.html">
<span class="mui-icon iconfont icon-circle"></span>
<span class="mui-tab-label">圈</span>
</a>
<a class="mui-tab-item" href="user_index.html">
<span class="mui-icon iconfont icon-shouye"></span>
<span class="mui-tab-label">我</span>
</a>
</nav>
<script src="../js/mui.min.js"></script>
<script type="text/javascript" charset="utf-8">
//mui初始化
mui.init();
var subpages = ['first_index.html', 'circle_index.html', 'user_index.html'];
var subpage_style = {
top: '0',
bottom: '51px'
};
var aniShow = {};
//创建子页面,首个选项卡页面显示,其它均隐藏;
mui.plusReady(function() {
var self = plus.webview.currentWebview();
for (var i = 0; i < 3; i++) {
var temp = {};
var sub = plus.webview.create(subpages[i], subpages[i], subpage_style);
if (i > 0) {
}else{
temp[subpages[i]] = "true";
mui.extend(aniShow,temp);
}
self.append(sub);
}
setTimeout(function(){
for(var i=0;i<3;i++){
if (i > 0) {
plus.webview.getWebviewById(subpages[i]).hide();
}
}
},10);
});
//当前激活选项
var activeTab = subpages[0];
// var title = document.getElementById("title");
//选项卡点击事件
mui('.mui-bar-tab').on('tap', 'a', function(e) {
var targetTab = this.getAttribute('href');
if (targetTab == activeTab) {
return;
}
//显示目标选项卡
plus.webview.show(targetTab);
//隐藏当前;
plus.webview.hide(activeTab);
//更改当前活跃的选项卡
activeTab = targetTab;
});
//自定义事件,模拟点击“首页选项卡”
document.addEventListener('gohome', function() {
var defaultTab = document.getElementById("defaultTab");
//模拟首页点击
mui.trigger(defaultTab, 'tap');
//切换选项卡高亮
var current = document.querySelector(".mui-bar-tab>.mui-tab-item.mui-active");
if (defaultTab !== current) {
current.classList.remove('mui-active');
defaultTab.classList.add('mui-active');
}
});
</script>
类似这个问题http://ask.dcloud.net.cn/question/27036
方法就是在根页面创建子webview的时候要隐藏的子webview延时10ms隐藏就可以了
<nav class="mui-bar mui-bar-tab">
<a id="defaultTab" class="mui-tab-item mui-active" href="first_index.html">
<span class="mui-icon iconfont icon-home"></span>
<span class="mui-tab-label">首页</span>
</a>
<a class="mui-tab-item" href="circle_index.html">
<span class="mui-icon iconfont icon-circle"></span>
<span class="mui-tab-label">圈</span>
</a>
<a class="mui-tab-item" href="user_index.html">
<span class="mui-icon iconfont icon-shouye"></span>
<span class="mui-tab-label">我</span>
</a>
</nav>
<script src="../js/mui.min.js"></script>
<script type="text/javascript" charset="utf-8">
//mui初始化
mui.init();
var subpages = ['first_index.html', 'circle_index.html', 'user_index.html'];
var subpage_style = {
top: '0',
bottom: '51px'
};
var aniShow = {};
//创建子页面,首个选项卡页面显示,其它均隐藏;
mui.plusReady(function() {
var self = plus.webview.currentWebview();
for (var i = 0; i < 3; i++) {
var temp = {};
var sub = plus.webview.create(subpages[i], subpages[i], subpage_style);
if (i > 0) {
}else{
temp[subpages[i]] = "true";
mui.extend(aniShow,temp);
}
self.append(sub);
}
setTimeout(function(){
for(var i=0;i<3;i++){
if (i > 0) {
plus.webview.getWebviewById(subpages[i]).hide();
}
}
},10);
});
//当前激活选项
var activeTab = subpages[0];
// var title = document.getElementById("title");
//选项卡点击事件
mui('.mui-bar-tab').on('tap', 'a', function(e) {
var targetTab = this.getAttribute('href');
if (targetTab == activeTab) {
return;
}
//显示目标选项卡
plus.webview.show(targetTab);
//隐藏当前;
plus.webview.hide(activeTab);
//更改当前活跃的选项卡
activeTab = targetTab;
});
//自定义事件,模拟点击“首页选项卡”
document.addEventListener('gohome', function() {
var defaultTab = document.getElementById("defaultTab");
//模拟首页点击
mui.trigger(defaultTab, 'tap');
//切换选项卡高亮
var current = document.querySelector(".mui-bar-tab>.mui-tab-item.mui-active");
if (defaultTab !== current) {
current.classList.remove('mui-active');
defaultTab.classList.add('mui-active');
}
});
</script>
收起阅读 »

蓝牙打印机打印小票项目版
本文参考:安卓Native.js蓝牙连接票据打印机完整代码
注意:本代码是很多年前的老代码了,已停止维护,对现在的uni-app不适用了。后续项目如果有uni-app蓝牙打印需求的话,会再封装一份新的。不用再私信我了,我都忘了咋写的了...
项目需要需要写一个手机开小票的东西,蓝牙打印机是目前比较成熟的东西!某宝买了一个蓝牙打印机和几卷热敏纸开搞.....
本人对android原生的东西不了解,也不想去麻烦我们的android工程师,只好从论坛内找,很轻松找打了本文参考链接里面这位仁兄写的文章,大写的服....同时也见识到了Native.js的威力,通过该文章确实可以连接到打印机也可以打印,但是说实话真不好用,主要有以下几点
1.不支持自动连接打印机,操作复杂
2.蓝牙配对这一环节不好用还,而且速度很慢很费时间,没有配对错误提示也没有成功提示
3.手动配对好之后仍需要重新搜索蓝牙设备手动连接设备一次
显然这样的体验是拿不上台面的,项目经理不愿意客户更不会愿意,于是开始大换血,主要做了以下优化
1.首先界面要做的逼格高一点,尤其是进行到了哪一步一定要让客户知道啊
2.增加了检测蓝牙开启状态,傻瓜式操作
3.优化了检测配对情况,原来如果配对输入的密码不对也有可能会被加入到已配对列表里面
4.最主要的就是优化配对这一环节,原来的做法是根据点击的设备ID在重新搜索到和该Id一致的时候配对,现在是直接配对取消了重新搜索这一环节,稳定性和配对时间都比前者好多了,并且有了配对状态提示,配对成功和失败都是有提示的
5.连接打印机这一环节分成了两种情况,一种是配对后直接连接需要在有其他操作,另一种就是手动点击已配对列表的设备连接打印机
6.只要连接过一次打印机的下次启动app会自动连接(根据缓存来的,默认连接的是上一次连接的打印机)
真机测试完全没问题,但是问题出现在了打包之后....在搜索开启蓝牙和搜索蓝牙设备的时候都不行。一想是权限的问题,吧蓝牙权限加上之后就可以了。。。
这三个权限是
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BLUETOOTH_PRIVILEGED
模块里面一定要把Geolocation(位置信息),加上否则搜不出来设备列表,真是想不明白为什么蓝牙还需要获取位置信息?
这里我就不贴代码了,具体看附件,封装程度算是较高了,基本上小改下就可以用了
附件是我新建的一个app项目,核心JS文件是printer.js
本文参考:安卓Native.js蓝牙连接票据打印机完整代码
注意:本代码是很多年前的老代码了,已停止维护,对现在的uni-app不适用了。后续项目如果有uni-app蓝牙打印需求的话,会再封装一份新的。不用再私信我了,我都忘了咋写的了...
项目需要需要写一个手机开小票的东西,蓝牙打印机是目前比较成熟的东西!某宝买了一个蓝牙打印机和几卷热敏纸开搞.....
本人对android原生的东西不了解,也不想去麻烦我们的android工程师,只好从论坛内找,很轻松找打了本文参考链接里面这位仁兄写的文章,大写的服....同时也见识到了Native.js的威力,通过该文章确实可以连接到打印机也可以打印,但是说实话真不好用,主要有以下几点
1.不支持自动连接打印机,操作复杂
2.蓝牙配对这一环节不好用还,而且速度很慢很费时间,没有配对错误提示也没有成功提示
3.手动配对好之后仍需要重新搜索蓝牙设备手动连接设备一次
显然这样的体验是拿不上台面的,项目经理不愿意客户更不会愿意,于是开始大换血,主要做了以下优化
1.首先界面要做的逼格高一点,尤其是进行到了哪一步一定要让客户知道啊
2.增加了检测蓝牙开启状态,傻瓜式操作
3.优化了检测配对情况,原来如果配对输入的密码不对也有可能会被加入到已配对列表里面
4.最主要的就是优化配对这一环节,原来的做法是根据点击的设备ID在重新搜索到和该Id一致的时候配对,现在是直接配对取消了重新搜索这一环节,稳定性和配对时间都比前者好多了,并且有了配对状态提示,配对成功和失败都是有提示的
5.连接打印机这一环节分成了两种情况,一种是配对后直接连接需要在有其他操作,另一种就是手动点击已配对列表的设备连接打印机
6.只要连接过一次打印机的下次启动app会自动连接(根据缓存来的,默认连接的是上一次连接的打印机)
真机测试完全没问题,但是问题出现在了打包之后....在搜索开启蓝牙和搜索蓝牙设备的时候都不行。一想是权限的问题,吧蓝牙权限加上之后就可以了。。。
这三个权限是
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.BLUETOOTH_PRIVILEGED
模块里面一定要把Geolocation(位置信息),加上否则搜不出来设备列表,真是想不明白为什么蓝牙还需要获取位置信息?
这里我就不贴代码了,具体看附件,封装程度算是较高了,基本上小改下就可以用了
附件是我新建的一个app项目,核心JS文件是printer.js
收起阅读 »
iOS打包“doesn't support the Push Notifications capability”错误解决方法
为了解决iOS10平台兼容性问题,云端打包环境更新为(XCode8+iOS10 SDK)。
导致提交云端打包可能提示以下错误:
...
Check dependencies
Provisioning profile "XXXXXX" doesn't support the Push Notifications capability.
Provisioning profile "XXXXXX" doesn't include the aps-environment entitlement.
Code signing is required for product type 'Application' in SDK 'iOS 10.0'
...
此错误的原因是在新版本XCode编译环境中会校验profile文件中是否配置使用Push功能。
如果应用中添加了“Push(消息推送)”模块(HBuilder的manifest.json文件“模块权限”->“模块设置”中配置),profile文件中则必需配置添加“Push Notifications”能力。
有两种解决方案:
一种是删除Push功能,即在HBuilder的manifest.json文件“模块权限”->“模块设置”中配置删除“Push(消息推送)”模块;
如果手动修改过manifest.json文件,请切换到源码视图,将permissions下的所有push节点数据都删除
另一种是更新profile文件,操作方法如下:
确保使用的App IDs打开“Push Notifications”服务
- 登录苹果开发者网站,输入开发者账号、密码并登录
- 左侧选择“Certificates, IDs & Profiles”,打开iOS证书管理界面
- 左侧“Identifiers”栏下选择“App IDs”,打开应用ID管理界面
- 在右侧ID管理列表中选择需要使用的应用标识
- 点击“Edit”按钮,在打开的服务列表中选中“Push Notifications”服务,点击“Done”保存
重新生成profile文件
- 左侧“Provisioning Profiles”栏下选择“Distribution”,打开发布profile管理界面
- 在右侧profile管理表中选择需要更新的profile项
- 点击“Edit”按钮,打开profile编辑页面
- 确认配置项正确,点击“Generate”按钮重新生成profile文件
验证方法
简单验证profile文件是否配置Push功能的方法是使用记事本打开profile文件,搜索是否存在“<key>aps-environment</key>”。
如果存在则表明配置Push功能正确,重新提交云端打包即可。
为了解决iOS10平台兼容性问题,云端打包环境更新为(XCode8+iOS10 SDK)。
导致提交云端打包可能提示以下错误:
...
Check dependencies
Provisioning profile "XXXXXX" doesn't support the Push Notifications capability.
Provisioning profile "XXXXXX" doesn't include the aps-environment entitlement.
Code signing is required for product type 'Application' in SDK 'iOS 10.0'
...
此错误的原因是在新版本XCode编译环境中会校验profile文件中是否配置使用Push功能。
如果应用中添加了“Push(消息推送)”模块(HBuilder的manifest.json文件“模块权限”->“模块设置”中配置),profile文件中则必需配置添加“Push Notifications”能力。
有两种解决方案:
一种是删除Push功能,即在HBuilder的manifest.json文件“模块权限”->“模块设置”中配置删除“Push(消息推送)”模块;
如果手动修改过manifest.json文件,请切换到源码视图,将permissions下的所有push节点数据都删除
另一种是更新profile文件,操作方法如下:
确保使用的App IDs打开“Push Notifications”服务
- 登录苹果开发者网站,输入开发者账号、密码并登录
- 左侧选择“Certificates, IDs & Profiles”,打开iOS证书管理界面
- 左侧“Identifiers”栏下选择“App IDs”,打开应用ID管理界面
- 在右侧ID管理列表中选择需要使用的应用标识
- 点击“Edit”按钮,在打开的服务列表中选中“Push Notifications”服务,点击“Done”保存
重新生成profile文件
- 左侧“Provisioning Profiles”栏下选择“Distribution”,打开发布profile管理界面
- 在右侧profile管理表中选择需要更新的profile项
- 点击“Edit”按钮,打开profile编辑页面
- 确认配置项正确,点击“Generate”按钮重新生成profile文件
验证方法
简单验证profile文件是否配置Push功能的方法是使用记事本打开profile文件,搜索是否存在“<key>aps-environment</key>”。
如果存在则表明配置Push功能正确,重新提交云端打包即可。

学习笔记自我小结(二)
1.打开一个webview,要采用延时,因为webview样式渲染需要时间
bindCreateAddr: function() {//新建地址栏
mui("#addressManage .mui-scroll")[0].innerHTML = '';
mui(".check-btn-total")[0].classList.add("hide");
setTimeout(function() { //加个延时
mui.openWindow({
url: 'newAddress.html',
id: 'newAddress.html',
show: {
aniShow: 'pop-in'
},
waiting: {
autoShow: false
}
});
}, 70);
},
要加个延时。虽然js的确清除了innerHmtl = '' 但是webview的渲染执行,在openwindow执行后,未必就
渲染成功。
否则到newAddress.html 页面 再返回的时候,webview的渲染才会执行,就会看到执行innerHTML = ''操作之前的样式,然后再显示 innerHTML = '' 执行的操作样式。
这里重点注意一下。。。
- picker 省市区的三级联动 选中默认值,必须得加上延时才行。
cityPicker.pickers[0].setSelectedValue(130000);
setTimeout(function(){
cityPicker.pickers[1].setSelectedValue(130200);
},100);
我侧过了,就是选择完第一个第二个效果还没显示完,所以不选择,设个延时就好了。希望对以后的朋友有帮助。
3.关于聚焦在input框上,系统自动调用软键盘会将底部的fixed定位的按钮顶起来。
原因是因为: 调用软键盘的显示,会将当前的webview挤压,减少视口的高度。
解决:监控 document.body.onresize 的事件来解决问题。
如下代码:
//代码结构如下,所有内容包含在了mui-scroll 里面。因为mui-scroll 是absolute,所以body的高度是无法因内容的多少而变化的。
//所以监控了mui-scroll的高度。
// 初始化加载第一次的未调用软键盘时的高度 newAddress.view.scrollOffHeight = mui(".mui-scroll")[0].offsetHeight。
//然后再比较, 代码如下:
<div class="mui-content">
<div class="mui-scroll-wrapper">
<div class="mui-scroll">
</div>
</div>
</div>
newAddress.view.scrollOffHeight = mui(".mui-scroll")[0].offsetHeight;//
document.body.onresize = function() {
if(newAddress.view.scrollOffHeight > mui(".mui-scroll")[0].offsetHeight) {//比较
mui(".check-btn-total")[0].style.cssText = "display:none"; //控制底部的fixed按钮
} else {
mui(".check-btn-total")[0].style.cssText = "display:block";
}
}
4 .mui-content {overflow:hidden} 解决 scroll 滚动条问题
1.打开一个webview,要采用延时,因为webview样式渲染需要时间
bindCreateAddr: function() {//新建地址栏
mui("#addressManage .mui-scroll")[0].innerHTML = '';
mui(".check-btn-total")[0].classList.add("hide");
setTimeout(function() { //加个延时
mui.openWindow({
url: 'newAddress.html',
id: 'newAddress.html',
show: {
aniShow: 'pop-in'
},
waiting: {
autoShow: false
}
});
}, 70);
},
要加个延时。虽然js的确清除了innerHmtl = '' 但是webview的渲染执行,在openwindow执行后,未必就
渲染成功。
否则到newAddress.html 页面 再返回的时候,webview的渲染才会执行,就会看到执行innerHTML = ''操作之前的样式,然后再显示 innerHTML = '' 执行的操作样式。
这里重点注意一下。。。
- picker 省市区的三级联动 选中默认值,必须得加上延时才行。
cityPicker.pickers[0].setSelectedValue(130000);
setTimeout(function(){
cityPicker.pickers[1].setSelectedValue(130200);
},100);
我侧过了,就是选择完第一个第二个效果还没显示完,所以不选择,设个延时就好了。希望对以后的朋友有帮助。
3.关于聚焦在input框上,系统自动调用软键盘会将底部的fixed定位的按钮顶起来。
原因是因为: 调用软键盘的显示,会将当前的webview挤压,减少视口的高度。
解决:监控 document.body.onresize 的事件来解决问题。
如下代码:
//代码结构如下,所有内容包含在了mui-scroll 里面。因为mui-scroll 是absolute,所以body的高度是无法因内容的多少而变化的。
//所以监控了mui-scroll的高度。
// 初始化加载第一次的未调用软键盘时的高度 newAddress.view.scrollOffHeight = mui(".mui-scroll")[0].offsetHeight。
//然后再比较, 代码如下:
<div class="mui-content">
<div class="mui-scroll-wrapper">
<div class="mui-scroll">
</div>
</div>
</div>
newAddress.view.scrollOffHeight = mui(".mui-scroll")[0].offsetHeight;//
document.body.onresize = function() {
if(newAddress.view.scrollOffHeight > mui(".mui-scroll")[0].offsetHeight) {//比较
mui(".check-btn-total")[0].style.cssText = "display:none"; //控制底部的fixed按钮
} else {
mui(".check-btn-total")[0].style.cssText = "display:block";
}
}
4 .mui-content {overflow:hidden} 解决 scroll 滚动条问题
收起阅读 »
学习笔记自我小结(2)
1.打开一个webview,要采用延时,因为webview样式渲染需要时间
bindCreateAddr: function() {//新建地址栏
mui("#addressManage .mui-scroll")[0].innerHTML = '';
mui(".check-btn-total")[0].classList.add("hide");
setTimeout(function() { //加个延时
mui.openWindow({
url: 'newAddress.html',
id: 'newAddress.html',
show: {
aniShow: 'pop-in'
},
waiting: {
autoShow: false
}
});
}, 70);
},
要加个延时。虽然js的确清除了innerHmtl = '' 但是webview的渲染执行,在openwindow执行后,未必就
渲染成功。
否则到newAddress.html 页面 再返回的时候,webview的渲染才会执行,就会看到执行innerHTML = ''操作之前的样式,然后再显示 innerHTML = '' 执行的操作样式。
这里重点注意一下。。。
- picker 省市区的三级联动 选中默认值,必须得加上延时才行。
cityPicker.pickers[0].setSelectedValue(130000);
setTimeout(function(){
cityPicker.pickers[1].setSelectedValue(130200);
},100);
我侧过了,就是选择完第一个第二个效果还没显示完,所以不选择,设个延时就好了。希望对以后的朋友有帮助。
4.关于聚焦在input框上,系统自动调用软键盘会将底部的fixed定位的按钮顶起来。
原因是因为: 调用软键盘的显示,会将当前的webview挤压,减少视口的高度。
解决:监控 document.body.onresize 的事件来解决问题。
如下代码:
//代码结构如下,所有内容包含在了mui-scroll 里面。因为mui-scroll 是absolute,所以body的高度是无法因内容的多少而变化的。
//所以监控了mui-scroll的高度。
// 初始化加载第一次的未调用软键盘时的高度 newAddress.view.scrollOffHeight = mui(".mui-scroll")[0].offsetHeight。
//然后再比较, 代码如下:
<div class="mui-content">
<div class="mui-scroll-wrapper">
<div class="mui-scroll">
</div>
</div>
</div>
newAddress.view.scrollOffHeight = mui(".mui-scroll")[0].offsetHeight;//
document.body.onresize = function() {
if(newAddress.view.scrollOffHeight > mui(".mui-scroll")[0].offsetHeight) {//比较
mui(".check-btn-total")[0].style.cssText = "display:none"; //控制底部的fixed按钮
} else {
mui(".check-btn-total")[0].style.cssText = "display:block";
}
}
-
.mui-content {overflow:hidden} 解决 scroll 滚动条问题
-
官方的checkbox例子中,点击checkbox的圆圈,触发2次change,已解决
不采用官方的checkbox, 自己重写。
-
打开新的webview,样式渲染需要时间,防止用户在第一眼看到乱的样式之前,用loaded加载完毕再show出
来, 虽然页面加载完毕好了,但是js的渲染还在继续,所以可以适当的采用延迟,这里我给了300msmui("#slider .mui-slider-group").on("tap", ".mui-slider-item", function() { var waiting = plus.nativeUI.showWaiting("等待中..."); var detailView = plus.webview.create('detail.html','detail.html'); var proId = this.getAttribute("id"); mui.fire(detailView,'getProDetailInfo',{ "proDetail": data["banners"][1] }); var waiting = plus.nativeUI.showWaiting("等待中..."); detailView.addEventListener("loaded",function(){//页面加载完成后才显示 setTimeout(function() { plus.nativeUI.closeWaiting("等待中..."); detailView.show("pop-in"); }, 300) },false); })
1.打开一个webview,要采用延时,因为webview样式渲染需要时间
bindCreateAddr: function() {//新建地址栏
mui("#addressManage .mui-scroll")[0].innerHTML = '';
mui(".check-btn-total")[0].classList.add("hide");
setTimeout(function() { //加个延时
mui.openWindow({
url: 'newAddress.html',
id: 'newAddress.html',
show: {
aniShow: 'pop-in'
},
waiting: {
autoShow: false
}
});
}, 70);
},
要加个延时。虽然js的确清除了innerHmtl = '' 但是webview的渲染执行,在openwindow执行后,未必就
渲染成功。
否则到newAddress.html 页面 再返回的时候,webview的渲染才会执行,就会看到执行innerHTML = ''操作之前的样式,然后再显示 innerHTML = '' 执行的操作样式。
这里重点注意一下。。。
- picker 省市区的三级联动 选中默认值,必须得加上延时才行。
cityPicker.pickers[0].setSelectedValue(130000);
setTimeout(function(){
cityPicker.pickers[1].setSelectedValue(130200);
},100);
我侧过了,就是选择完第一个第二个效果还没显示完,所以不选择,设个延时就好了。希望对以后的朋友有帮助。
4.关于聚焦在input框上,系统自动调用软键盘会将底部的fixed定位的按钮顶起来。
原因是因为: 调用软键盘的显示,会将当前的webview挤压,减少视口的高度。
解决:监控 document.body.onresize 的事件来解决问题。
如下代码:
//代码结构如下,所有内容包含在了mui-scroll 里面。因为mui-scroll 是absolute,所以body的高度是无法因内容的多少而变化的。
//所以监控了mui-scroll的高度。
// 初始化加载第一次的未调用软键盘时的高度 newAddress.view.scrollOffHeight = mui(".mui-scroll")[0].offsetHeight。
//然后再比较, 代码如下:
<div class="mui-content">
<div class="mui-scroll-wrapper">
<div class="mui-scroll">
</div>
</div>
</div>
newAddress.view.scrollOffHeight = mui(".mui-scroll")[0].offsetHeight;//
document.body.onresize = function() {
if(newAddress.view.scrollOffHeight > mui(".mui-scroll")[0].offsetHeight) {//比较
mui(".check-btn-total")[0].style.cssText = "display:none"; //控制底部的fixed按钮
} else {
mui(".check-btn-total")[0].style.cssText = "display:block";
}
}
-
.mui-content {overflow:hidden} 解决 scroll 滚动条问题
-
官方的checkbox例子中,点击checkbox的圆圈,触发2次change,已解决
不采用官方的checkbox, 自己重写。
-
打开新的webview,样式渲染需要时间,防止用户在第一眼看到乱的样式之前,用loaded加载完毕再show出
来, 虽然页面加载完毕好了,但是js的渲染还在继续,所以可以适当的采用延迟,这里我给了300msmui("#slider .mui-slider-group").on("tap", ".mui-slider-item", function() { var waiting = plus.nativeUI.showWaiting("等待中..."); var detailView = plus.webview.create('detail.html','detail.html'); var proId = this.getAttribute("id"); mui.fire(detailView,'getProDetailInfo',{ "proDetail": data["banners"][1] }); var waiting = plus.nativeUI.showWaiting("等待中..."); detailView.addEventListener("loaded",function(){//页面加载完成后才显示 setTimeout(function() { plus.nativeUI.closeWaiting("等待中..."); detailView.show("pop-in"); }, 300) },false); })

push推送遇到的问题总结
android:
一开始做就是不认真,想当然所以走了不少弯路,所以一定要对推送插件开发指南详细认真阅读!,认真阅读!,认真阅读!,开始正题
1.在个推官网设置appid appsecret等等参数,这些就不多说了,都有教程
2.对于推送的消息分为两种 ,1:普通的推送消息 2:透传数据(透传的数据又分为两种 ,下面具体说)
3. 对于普通消息的推送 ,只会在消息中心显示消息,只会触发点击启动应用等动作。注意了,只是触发启动应用等动作,并不是响应click事件!!!!!!,这是坑我最惨的,一开始我以为可以响应,官网其实也说了:只是触发启动应用等动作,是我想当然了!!,所以发送普通消息就别想着去触发click事件了!!!!!
4 说完普通消息推送,剩下的透传数据的推送就可以响应click和receive了,当然这也是分情况的!!,真坑。分析如下
1.当发送透传数据的格式是标准格式({title:"通知标题",content:"通知内容",payload:"通知去干嘛这里可以自定义"}),这个时候消息会发送到消息中心,并且这个时候当用户点击这个消息,就会响应click事件!,妈蛋终于响应了!,但是抱歉只能响应click事件,要想响应receive还得分情况。
2.说完了响应click事件的情况,剩下的就是receive事件响应了。只有发送的是透传数据 而且不是标准格式并且 当前应用在活动,这3个条件,才可以响应receive事件!!!,但是消息中心并没有消息展示!!!,这就是最坑的!
所以总结如下:
触发click事件: 发送透传数据并且格式为标准格式。
触发receive事件:发送透传数据且格式为非标准格式且应用在活动。(消息栏不会有提示!!!!!)
ios:
在线:只能响应receive,但消息中心无消息
不在线:消息中心有消息,且响应click事件
android:
一开始做就是不认真,想当然所以走了不少弯路,所以一定要对推送插件开发指南详细认真阅读!,认真阅读!,认真阅读!,开始正题
1.在个推官网设置appid appsecret等等参数,这些就不多说了,都有教程
2.对于推送的消息分为两种 ,1:普通的推送消息 2:透传数据(透传的数据又分为两种 ,下面具体说)
3. 对于普通消息的推送 ,只会在消息中心显示消息,只会触发点击启动应用等动作。注意了,只是触发启动应用等动作,并不是响应click事件!!!!!!,这是坑我最惨的,一开始我以为可以响应,官网其实也说了:只是触发启动应用等动作,是我想当然了!!,所以发送普通消息就别想着去触发click事件了!!!!!
4 说完普通消息推送,剩下的透传数据的推送就可以响应click和receive了,当然这也是分情况的!!,真坑。分析如下
1.当发送透传数据的格式是标准格式({title:"通知标题",content:"通知内容",payload:"通知去干嘛这里可以自定义"}),这个时候消息会发送到消息中心,并且这个时候当用户点击这个消息,就会响应click事件!,妈蛋终于响应了!,但是抱歉只能响应click事件,要想响应receive还得分情况。
2.说完了响应click事件的情况,剩下的就是receive事件响应了。只有发送的是透传数据 而且不是标准格式并且 当前应用在活动,这3个条件,才可以响应receive事件!!!,但是消息中心并没有消息展示!!!,这就是最坑的!
所以总结如下:
触发click事件: 发送透传数据并且格式为标准格式。
触发receive事件:发送透传数据且格式为非标准格式且应用在活动。(消息栏不会有提示!!!!!)
ios:
在线:只能响应receive,但消息中心无消息
不在线:消息中心有消息,且响应click事件

【公告】关于HBuilder 7.6.3中Android4.4以下软键盘闪退,子webview切换异常,iOS关闭子窗口导致应用卡死等问题的解决办法
Android
软键盘闪退
HBuilder 7.6.3版真机调试,Android4.4以下设备,表单元素如input,点击获取焦点后软键盘出现立刻收回,再次点击无法弹出。
子窗口切换异常
Android平台下,父子webview模式。子webview首次显示,先全屏显示然后styles变化。
控制台信息
控制太多出的信息,是底层的日志信息,并不是bug,新的apk不会再出现这些日志信息。
iOS
关闭子窗口导致应用卡死
iOS父子webview模式下,关闭子窗口导致应用卡死。
解决办法
Alpha版HBuilder已修复以上问题,请更新或下载最新版Alpha版HBuilder。
下载地址: http://pan.baidu.com/s/1hs0O4eS#list/path=%2F&parentPath=%2Falpha%3Fqq-pf-to
7.6.5.201612262256-alpha 版本更新日志:
【重要】更新高德地图、百度地图、微信等第三SDK,支持https连接
Android平台修复获取设备屏幕逻辑分辨率不准确的问题
Android平台修复Webview作为子窗口使用fade-in动画效果显示不正常的问题
Android平台修复调用微信登录可能无法触发回调的问题
iOS平台补齐讯飞语音支持设置识别语言、标点符号功能
iOS平台修复关闭子Webview窗口可能导致页面卡死的问题
iOS平台修复个推发送透传消息启动可能导致异常退出的问题
Android
软键盘闪退
HBuilder 7.6.3版真机调试,Android4.4以下设备,表单元素如input,点击获取焦点后软键盘出现立刻收回,再次点击无法弹出。
子窗口切换异常
Android平台下,父子webview模式。子webview首次显示,先全屏显示然后styles变化。
控制台信息
控制太多出的信息,是底层的日志信息,并不是bug,新的apk不会再出现这些日志信息。
iOS
关闭子窗口导致应用卡死
iOS父子webview模式下,关闭子窗口导致应用卡死。
解决办法
Alpha版HBuilder已修复以上问题,请更新或下载最新版Alpha版HBuilder。
下载地址: http://pan.baidu.com/s/1hs0O4eS#list/path=%2F&parentPath=%2Falpha%3Fqq-pf-to
7.6.5.201612262256-alpha 版本更新日志:
【重要】更新高德地图、百度地图、微信等第三SDK,支持https连接
Android平台修复获取设备屏幕逻辑分辨率不准确的问题
Android平台修复Webview作为子窗口使用fade-in动画效果显示不正常的问题
Android平台修复调用微信登录可能无法触发回调的问题
iOS平台补齐讯飞语音支持设置识别语言、标点符号功能
iOS平台修复关闭子Webview窗口可能导致页面卡死的问题
iOS平台修复个推发送透传消息启动可能导致异常退出的问题

解析XML文件
之前一直用json格式,后来接口边XML,发现解析也方便:
var xmlDoc=new DOMParser().parseFromString(jsonStr, "text/xml");
var desc = xmlDoc.getElementsByTagName("desc")[0].firstChild.nodeValue;
var flag = xmlDoc.getElementsByTagName("flag")[0].firstChild.nodeValue;
之前一直用json格式,后来接口边XML,发现解析也方便:
var xmlDoc=new DOMParser().parseFromString(jsonStr, "text/xml");
var desc = xmlDoc.getElementsByTagName("desc")[0].firstChild.nodeValue;
var flag = xmlDoc.getElementsByTagName("flag")[0].firstChild.nodeValue;