HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

分享一个小工具,用户HB编写的H5+混合APP批量制作增量包

差量更新

本程序是为HBuilder 编写的HTML5+ 混合APP 差量更新所定制的一个小工具
本程序主要是针对资源版本.进行文件对比.将差异文件进行打包,制作符合HBuilder的差量更新的更新包.
使用说明:

手动制作 差量包
1.可选择自定不同两个版本.进行差量包打包

2.使用自动增量对比.须将所有旧版本资源文件放在old_ves文件夹下.选择最新版本资源包.
程序自动将差量跟新包以 "旧版本_新版本.wgtu"为名称储存在程序目录 "Pack/新版本号" 文件夹下

程序更新逻辑可为 优先下载 "当前版本_新版本.wgtu" 的增量文件.如文件不存在 下载整体资源包

继续阅读 »

本程序是为HBuilder 编写的HTML5+ 混合APP 差量更新所定制的一个小工具
本程序主要是针对资源版本.进行文件对比.将差异文件进行打包,制作符合HBuilder的差量更新的更新包.
使用说明:

手动制作 差量包
1.可选择自定不同两个版本.进行差量包打包

2.使用自动增量对比.须将所有旧版本资源文件放在old_ves文件夹下.选择最新版本资源包.
程序自动将差量跟新包以 "旧版本_新版本.wgtu"为名称储存在程序目录 "Pack/新版本号" 文件夹下

程序更新逻辑可为 优先下载 "当前版本_新版本.wgtu" 的增量文件.如文件不存在 下载整体资源包

收起阅读 »

双webview上拉加载BUG修复

MUI在没有更多数据后默认将上拉事件取消监听,这个做法本身不存在问题
但是大多情况下,上拉一般是跟下拉刷新同时存在
如果没有更多数据后客户进行下拉刷新会发现数据永远不会再加载了

以下是相关修复代码

endPullup:function(finished) {//上拉加载结束  
                var self = this;  
                if (self.pullLoading) {  
                    self.pullLoading.classList.remove(CLASS_VISIBILITY);  
                    self.pullLoading.classList.add(CLASS_HIDDEN);  
                    self.isLoading = false;  
                    if (finished) {  
                        self.finished = true;  
                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;  
                        self.pullCaption.innerHTML = self.options.up.contentnomore;  
                        //取消5+的plusscrollbottom事件  
                        document.removeEventListener('plusscrollbottom', self);  
                        window.removeEventListener('dragup', self);  
                    } else { //初始化时隐藏,后续不再隐藏  
                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;  
                        self.pullCaption.innerHTML = self.options.up.contentdown;  
//修复代码,加上后,在相关的下拉刷新调用方法内调用mui('#pullrefresh').pullRefresh().endPullupToRefresh(false);  
self.finished = false;  
 document.addEventListener('plusscrollbottom', self);  
window.addEventListener('dragup', self);  
                    }  
                }  
            },
继续阅读 »

MUI在没有更多数据后默认将上拉事件取消监听,这个做法本身不存在问题
但是大多情况下,上拉一般是跟下拉刷新同时存在
如果没有更多数据后客户进行下拉刷新会发现数据永远不会再加载了

以下是相关修复代码

endPullup:function(finished) {//上拉加载结束  
                var self = this;  
                if (self.pullLoading) {  
                    self.pullLoading.classList.remove(CLASS_VISIBILITY);  
                    self.pullLoading.classList.add(CLASS_HIDDEN);  
                    self.isLoading = false;  
                    if (finished) {  
                        self.finished = true;  
                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_NOMORE;  
                        self.pullCaption.innerHTML = self.options.up.contentnomore;  
                        //取消5+的plusscrollbottom事件  
                        document.removeEventListener('plusscrollbottom', self);  
                        window.removeEventListener('dragup', self);  
                    } else { //初始化时隐藏,后续不再隐藏  
                        self.pullCaption.className = CLASS_PULL_CAPTION + ' ' + CLASS_PULL_CAPTION_DOWN;  
                        self.pullCaption.innerHTML = self.options.up.contentdown;  
//修复代码,加上后,在相关的下拉刷新调用方法内调用mui('#pullrefresh').pullRefresh().endPullupToRefresh(false);  
self.finished = false;  
 document.addEventListener('plusscrollbottom', self);  
window.addEventListener('dragup', self);  
                    }  
                }  
            },
收起阅读 »

【示例】wap2app应用中302等二次跳转的地址匹配

302 matchurls sitemap wap2app

场景一

页面A -> 点击跳转 -> 302等地址 -> 目标地址

302地址: http://m.example.com/redirect?redirect_url=http://m.example.com/detail.html
目标地址:http://m.example.com/detail.html

为了防止出现白屏或者重复打开窗口的情况,需要在 sitemap.json -> pages 中,将302地址与目标地址匹配到一起。

{  
  "webviewId": "detail",  
  "matchUrls": [  
    {  
      "pathname": "/redirect",  
      "search": "R:redirect_url=.*\\/detail.html"  
    }, {  
      "pathname": "/detail.html"  
    }  
  ]  
}

Tips
快速获取matchUrls可用的匹配依据的值

继续阅读 »

场景一

页面A -> 点击跳转 -> 302等地址 -> 目标地址

302地址: http://m.example.com/redirect?redirect_url=http://m.example.com/detail.html
目标地址:http://m.example.com/detail.html

为了防止出现白屏或者重复打开窗口的情况,需要在 sitemap.json -> pages 中,将302地址与目标地址匹配到一起。

{  
  "webviewId": "detail",  
  "matchUrls": [  
    {  
      "pathname": "/redirect",  
      "search": "R:redirect_url=.*\\/detail.html"  
    }, {  
      "pathname": "/detail.html"  
    }  
  ]  
}

Tips
快速获取matchUrls可用的匹配依据的值

收起阅读 »

【示例】wap2app应用在iOS平台下唤醒淘宝

淘宝 wap2app

wap2app 应用,在 iOS 环境下唤醒淘宝等应用,需要配置两处白名单。
第一处
manifest.json -> plus -> distribute -> apple 节点下,添加 urlschemewhitelist。对应的值为数组格式,如:

{  
  "plus": {  
    "distribute": {  
      "apple": {  
        "urlschemewhitelist": [  
          "mqq",  
          "taobao"  
        ]  
      }  
    }  
  }  
}

第二处
同样是 manifest.json 文件 plus 节点下,添加 schemeWhitelist 节点,其对应的值也是数组格式,如:

{  
  "plus": {  
    "schemeWhitelist": [  
      "mqq",  
      "taobao"  
    ]  
  }  
}

注意
urlschemewhitelist 和 schemeWhitelist 所在的节点不同,注意属性名的大小写,保持这两个属性对应的值相同。

继续阅读 »

wap2app 应用,在 iOS 环境下唤醒淘宝等应用,需要配置两处白名单。
第一处
manifest.json -> plus -> distribute -> apple 节点下,添加 urlschemewhitelist。对应的值为数组格式,如:

{  
  "plus": {  
    "distribute": {  
      "apple": {  
        "urlschemewhitelist": [  
          "mqq",  
          "taobao"  
        ]  
      }  
    }  
  }  
}

第二处
同样是 manifest.json 文件 plus 节点下,添加 schemeWhitelist 节点,其对应的值也是数组格式,如:

{  
  "plus": {  
    "schemeWhitelist": [  
      "mqq",  
      "taobao"  
    ]  
  }  
}

注意
urlschemewhitelist 和 schemeWhitelist 所在的节点不同,注意属性名的大小写,保持这两个属性对应的值相同。

收起阅读 »

【汇总】wap2app常见问题

wap2app

常见问题

302之类的二次跳转如何匹配防止白屏

http://ask.dcloud.net.cn/article/13074

相同规则的地址间跳转会反复打开新窗口么?

当前 webview 中跳转一个相同规则的 url,直接在当前 webview 中加载,不会重复打开新的 webview。

可以本地打包或嵌入其它应用内么?

不支持本地打包,只能通过云端打包成相应的apk/ipa。同时,也不能嵌入到其它应用中。
http://ask.dcloud.net.cn/question/48290

如何移除原生导航栏

原则上不建议移除原生导航栏,原生导航栏也是优化的比较重要的一部分。
http://ask.dcloud.net.cn/question/50018

网站引用了 mui 导致返回键操作异常

mui.js 在 5+ 环境下会处理 backbutton,wap2app 同样也会处理,因此会造成冲突。
mui 提供了关闭监听的配置,详细参考文档说明:关闭页面

mui.init({  
  keyEventBind: {  
    backbutton: false //关闭back按键监听  
  }  
});

wap2app如何让一个链接是在同一个webview中跳转,而不是打开另外一个webview。

将目标 url 配置到一个 page 的 matchUrls。

wap2app如何返回上一页并刷新

获取目标 webview 对象,并执行刷新逻辑。
http://ask.dcloud.net.cn/question/49546

wap2app应用iOS如何唤起淘宝等第三方应用

需要配置两处白名单
http://ask.dcloud.net.cn/article/13073

wap2app原生下拉pullToRefresh怎么更新list的DOM而不是刷新网页

可以执行自定义的下拉刷新逻辑
http://ask.dcloud.net.cn/question/48490

wap2app中使用Native.js

远程的 HTML 不能使用 Native.js
http://ask.dcloud.net.cn/question/48540

退出时候的反馈如何去掉

调整首页 easyConfig -> quit 的配置即可
http://ask.dcloud.net.cn/article/12750
http://ask.dcloud.net.cn/article/13069

自定义插件以及其它第三方SDK的集成

不支持扩展

首页titleNview配置的按钮怎么添加监听事件

http://ask.dcloud.net.cn/article/12622

云打包时如何加密

云端打包时,选择“启用js原生混淆”。如果有需要,可以使用第三方,如360等提供的加固方案,进行加固。

扩展阅读

wap2app概述(入门必读)
sitemap.json文档
app.js文档
wap2app应用强化
wap2app常见问题

继续阅读 »

常见问题

302之类的二次跳转如何匹配防止白屏

http://ask.dcloud.net.cn/article/13074

相同规则的地址间跳转会反复打开新窗口么?

当前 webview 中跳转一个相同规则的 url,直接在当前 webview 中加载,不会重复打开新的 webview。

可以本地打包或嵌入其它应用内么?

不支持本地打包,只能通过云端打包成相应的apk/ipa。同时,也不能嵌入到其它应用中。
http://ask.dcloud.net.cn/question/48290

如何移除原生导航栏

原则上不建议移除原生导航栏,原生导航栏也是优化的比较重要的一部分。
http://ask.dcloud.net.cn/question/50018

网站引用了 mui 导致返回键操作异常

mui.js 在 5+ 环境下会处理 backbutton,wap2app 同样也会处理,因此会造成冲突。
mui 提供了关闭监听的配置,详细参考文档说明:关闭页面

mui.init({  
  keyEventBind: {  
    backbutton: false //关闭back按键监听  
  }  
});

wap2app如何让一个链接是在同一个webview中跳转,而不是打开另外一个webview。

将目标 url 配置到一个 page 的 matchUrls。

wap2app如何返回上一页并刷新

获取目标 webview 对象,并执行刷新逻辑。
http://ask.dcloud.net.cn/question/49546

wap2app应用iOS如何唤起淘宝等第三方应用

需要配置两处白名单
http://ask.dcloud.net.cn/article/13073

wap2app原生下拉pullToRefresh怎么更新list的DOM而不是刷新网页

可以执行自定义的下拉刷新逻辑
http://ask.dcloud.net.cn/question/48490

wap2app中使用Native.js

远程的 HTML 不能使用 Native.js
http://ask.dcloud.net.cn/question/48540

退出时候的反馈如何去掉

调整首页 easyConfig -> quit 的配置即可
http://ask.dcloud.net.cn/article/12750
http://ask.dcloud.net.cn/article/13069

自定义插件以及其它第三方SDK的集成

不支持扩展

首页titleNview配置的按钮怎么添加监听事件

http://ask.dcloud.net.cn/article/12622

云打包时如何加密

云端打包时,选择“启用js原生混淆”。如果有需要,可以使用第三方,如360等提供的加固方案,进行加固。

扩展阅读

wap2app概述(入门必读)
sitemap.json文档
app.js文档
wap2app应用强化
wap2app常见问题

收起阅读 »

【文档】wap2app之app.js

app.js wap2app

该文章意在汇总整理 app.js 的配置,方便日常开发中查阅。
详细教程请参考 app.js - wap2app教程

App

App(appConfig);
参数说明 参数 类型 说明 更多
options Object 全局参数配置 *
onLaunch Function 生命周期函数,监听 wap2app 应用初始化。 wap2app 应用初始化完成时触发,全局只触发一次。
onShow Function 生命周期函数,监听 wap2app 应用显示。 当 wap2app 应用从后台进入前台显示时触发。
onHide Function 生命周期函数,监听 wap2app 应用隐藏。 当 wap2app 应用从前台进入后台时触发。

Tips
当用户按了设备 Home 键,wap2app 应用并不会立即被销毁,而是进入了后台运行。当再次打开 wap2app 应用时,会从后台进入前台。

appConfig -> options 参数说明 参数 类型 说明 更多
debug Boolean 是否输出日志,默认为 false。 通过 HBuilder 真机运行调试时,如果设置为 true,则在控制台输出日志信息。

Page

Page(id, pageConfig);
参数说明 参数 类型 说明 更多
id String webview 的 id 该值取自 sitemap.json 中配置 page 对应的 webviewId
pageConfig Object 页面参数配置 *
pageConfig 参数说明 参数 类型 说明 更多
onShow Function 生命周期函数,监听 webview 的显示。 对应的 webview 显示时触发
onClose Function 生命周期函数,监听 webview 的关闭。 对应的 webview 关闭时触发

运行环境

需要注意的是,以上函数中的 JavaScript 的代码,并不是在首页或者某个 webviewe 中执行。
所以当 JavaScript 代码中涉及到最某个特定 webview 中的内容进行操作时,需要获取 webview 通过 evalJS 方法来执行。

例如,从详情页返回时,希望刷新列表页。在 app.js 中,注册 detail 页面的配置。

Page('detail', {  
  onClose: function() {  
    // 刷新列表  
    var listWebview = plus.webview.getWebviewById('list');  
    if(listWebview) {  
      listWebview.evalJS('refresh()'); //refresh() 方法是目标窗口中全局的函数,用于刷新页面;  
      // 或者简单点,直接用 webview 的刷新方法;  
      // listWebview.reload(true);  
    }  
  }  
});

扩展阅读

wap2app概述(入门必读)
sitemap.json文档
app.js文档
wap2app应用强化
wap2app常见问题

继续阅读 »

该文章意在汇总整理 app.js 的配置,方便日常开发中查阅。
详细教程请参考 app.js - wap2app教程

App

App(appConfig);
参数说明 参数 类型 说明 更多
options Object 全局参数配置 *
onLaunch Function 生命周期函数,监听 wap2app 应用初始化。 wap2app 应用初始化完成时触发,全局只触发一次。
onShow Function 生命周期函数,监听 wap2app 应用显示。 当 wap2app 应用从后台进入前台显示时触发。
onHide Function 生命周期函数,监听 wap2app 应用隐藏。 当 wap2app 应用从前台进入后台时触发。

Tips
当用户按了设备 Home 键,wap2app 应用并不会立即被销毁,而是进入了后台运行。当再次打开 wap2app 应用时,会从后台进入前台。

appConfig -> options 参数说明 参数 类型 说明 更多
debug Boolean 是否输出日志,默认为 false。 通过 HBuilder 真机运行调试时,如果设置为 true,则在控制台输出日志信息。

Page

Page(id, pageConfig);
参数说明 参数 类型 说明 更多
id String webview 的 id 该值取自 sitemap.json 中配置 page 对应的 webviewId
pageConfig Object 页面参数配置 *
pageConfig 参数说明 参数 类型 说明 更多
onShow Function 生命周期函数,监听 webview 的显示。 对应的 webview 显示时触发
onClose Function 生命周期函数,监听 webview 的关闭。 对应的 webview 关闭时触发

运行环境

需要注意的是,以上函数中的 JavaScript 的代码,并不是在首页或者某个 webviewe 中执行。
所以当 JavaScript 代码中涉及到最某个特定 webview 中的内容进行操作时,需要获取 webview 通过 evalJS 方法来执行。

例如,从详情页返回时,希望刷新列表页。在 app.js 中,注册 detail 页面的配置。

Page('detail', {  
  onClose: function() {  
    // 刷新列表  
    var listWebview = plus.webview.getWebviewById('list');  
    if(listWebview) {  
      listWebview.evalJS('refresh()'); //refresh() 方法是目标窗口中全局的函数,用于刷新页面;  
      // 或者简单点,直接用 webview 的刷新方法;  
      // listWebview.reload(true);  
    }  
  }  
});

扩展阅读

wap2app概述(入门必读)
sitemap.json文档
app.js文档
wap2app应用强化
wap2app常见问题

收起阅读 »

【文档】wap2app之sitemap.json

文档 sitemap wap2app

该文章意在汇总整理 sitemap.json 的配置,方便日常开发中查阅。
详细教程请参考 sitemap.json概述 - wap2app教程

根节点

属性 类型 说明 更多
global Object App 全局配置 sitemap.json概述
pages Array M 站所有需要增强的页面配置 sitemap.json概述

global

App 全局配置

属性 类型 说明 更多
webviewParameter Object webview 相关配置 webviewParameter配置
easyConfig Object 为提升用户体验而提供的简化实现 easyConfig配置

pages

页面组配置

page

sitemap.json -> pages 集合的单个页面配置对象

属性 类型 说明 更多
webviewId String 当前页面所属 webview 的 id *
matchUrls Array 页面 url 匹配规则 matchUrls配置
webviewParameter Object webview 相关配置 webviewParameter配置
easyConfig Object 为提升用户体验而提供的简化实现 easyConfig配置

matchUrl

page -> matchUrls 集合的单个匹配规则对象

属性 类型 说明 更多
href String/RegExp/Wildcard 页面完整 url *
hostname String/RegExp/Wildcard 域名信息 *
pathname String/RegExp/Wildcard 路径信息 *
search String/RegExp/Wildcard 查询字符串信息 *
hash String/RegExp/Wildcard 锚点信息 *

Tip:
快速获取matchUrls可用的匹配依据的值

webviewParameter

webview 相关配置

属性 类型 说明 更多
titleNView Object 原生标题栏样式配置 titleNView配置
statusbar Object 系统状态栏样式配置 *
appendCss String 向服务端页面插入的 css 代码 *
appendJs String 向服务端页面插入的 JavaScript 代码 *
pullToRefresh Object 下拉刷新配置 *
tabBar Object 选项卡切换效果优化,目前仅支持首页底部选项卡 选项卡切换优化
subNViews String NView模板配置 NView模板

statusbar

系统状态栏样式配置

属性 类型 说明 更多
style String 状态栏前景色(文字颜色) *
background String 状态栏背景色,默认应当与原生导航条背景色保持一致 *

pullToRefresh

下拉刷新配置

属性 类型 说明 更多
support Boolean 是否启用原生下拉刷新,默认为 false *

easyConfig

为提升用户体验而提供的简化实现

属性 类型 说明 更多
back Object wap2app 后退逻辑 *
open Object 打开新窗口的优化 *
quit Object wap2app 退出逻辑 仅支持首页

back

wap2app 后退逻辑

属性 类型 说明 更多
before Array 后退前的优化 *
history Boolean 是否执行 history.back() *
back -> before 集合的单个配置 属性 类型 说明 更多
popupSelector String 弹出层选择器 *
closeSelector String 取消按钮选择器或遮罩层选择器 *
eventType String 事件类型,默认为 click *

open

打开新窗口的优化

属性 类型 说明 更多
animation Object 窗口动画配置 *
open -> animation 的配置 属性 类型 说明 更多
type String 窗口动画类型 窗口显示动画效果
duration Number 窗口动画执行时间,单位为 ms,默认 300ms *

quit

wap2app 退出逻辑,仅支持在首页配置。

属性 类型 说明 更多
toast Object toast 消息框配置 *
quit -> toast 配置 属性 类型 说明 更多
showFeedback Boolean 是否显示 toast,默认为 true *

扩展阅读

wap2app概述(入门必读)
sitemap.json文档
app.js文档
wap2app应用强化
wap2app常见问题

继续阅读 »

该文章意在汇总整理 sitemap.json 的配置,方便日常开发中查阅。
详细教程请参考 sitemap.json概述 - wap2app教程

根节点

属性 类型 说明 更多
global Object App 全局配置 sitemap.json概述
pages Array M 站所有需要增强的页面配置 sitemap.json概述

global

App 全局配置

属性 类型 说明 更多
webviewParameter Object webview 相关配置 webviewParameter配置
easyConfig Object 为提升用户体验而提供的简化实现 easyConfig配置

pages

页面组配置

page

sitemap.json -> pages 集合的单个页面配置对象

属性 类型 说明 更多
webviewId String 当前页面所属 webview 的 id *
matchUrls Array 页面 url 匹配规则 matchUrls配置
webviewParameter Object webview 相关配置 webviewParameter配置
easyConfig Object 为提升用户体验而提供的简化实现 easyConfig配置

matchUrl

page -> matchUrls 集合的单个匹配规则对象

属性 类型 说明 更多
href String/RegExp/Wildcard 页面完整 url *
hostname String/RegExp/Wildcard 域名信息 *
pathname String/RegExp/Wildcard 路径信息 *
search String/RegExp/Wildcard 查询字符串信息 *
hash String/RegExp/Wildcard 锚点信息 *

Tip:
快速获取matchUrls可用的匹配依据的值

webviewParameter

webview 相关配置

属性 类型 说明 更多
titleNView Object 原生标题栏样式配置 titleNView配置
statusbar Object 系统状态栏样式配置 *
appendCss String 向服务端页面插入的 css 代码 *
appendJs String 向服务端页面插入的 JavaScript 代码 *
pullToRefresh Object 下拉刷新配置 *
tabBar Object 选项卡切换效果优化,目前仅支持首页底部选项卡 选项卡切换优化
subNViews String NView模板配置 NView模板

statusbar

系统状态栏样式配置

属性 类型 说明 更多
style String 状态栏前景色(文字颜色) *
background String 状态栏背景色,默认应当与原生导航条背景色保持一致 *

pullToRefresh

下拉刷新配置

属性 类型 说明 更多
support Boolean 是否启用原生下拉刷新,默认为 false *

easyConfig

为提升用户体验而提供的简化实现

属性 类型 说明 更多
back Object wap2app 后退逻辑 *
open Object 打开新窗口的优化 *
quit Object wap2app 退出逻辑 仅支持首页

back

wap2app 后退逻辑

属性 类型 说明 更多
before Array 后退前的优化 *
history Boolean 是否执行 history.back() *
back -> before 集合的单个配置 属性 类型 说明 更多
popupSelector String 弹出层选择器 *
closeSelector String 取消按钮选择器或遮罩层选择器 *
eventType String 事件类型,默认为 click *

open

打开新窗口的优化

属性 类型 说明 更多
animation Object 窗口动画配置 *
open -> animation 的配置 属性 类型 说明 更多
type String 窗口动画类型 窗口显示动画效果
duration Number 窗口动画执行时间,单位为 ms,默认 300ms *

quit

wap2app 退出逻辑,仅支持在首页配置。

属性 类型 说明 更多
toast Object toast 消息框配置 *
quit -> toast 配置 属性 类型 说明 更多
showFeedback Boolean 是否显示 toast,默认为 true *

扩展阅读

wap2app概述(入门必读)
sitemap.json文档
app.js文档
wap2app应用强化
wap2app常见问题

收起阅读 »

--

外包 招聘

--

--

打包的ipa在APP Store审核过程中因定位被退回的解决方法

审核 App打包 定位

iOS应用如果需要用到定位,正常情况下

plus.geolocation.getCurrentPosition((data)=>{},(error)=>{})

即可,这时会弹出提示框给用户选择是否允许使用定位功能。
但关键的地方就是,现在审核标准需要在APP里面说明为什么要获取定位,
因此就要在manifest.json里面的代码视图添加相关代码:

"plus": {  
  "distribute": {  
   "apple": {  
     "plistcmds": [  
         "Set :NSLocationAlwaysUsageDescription 我是经常要使用定位的原因描述",  
         "Set :NSLocationWhenInUseUsageDescription 我是需要使用定位的原因描述"  
      ]  
   }  
 }  
}
继续阅读 »

iOS应用如果需要用到定位,正常情况下

plus.geolocation.getCurrentPosition((data)=>{},(error)=>{})

即可,这时会弹出提示框给用户选择是否允许使用定位功能。
但关键的地方就是,现在审核标准需要在APP里面说明为什么要获取定位,
因此就要在manifest.json里面的代码视图添加相关代码:

"plus": {  
  "distribute": {  
   "apple": {  
     "plistcmds": [  
         "Set :NSLocationAlwaysUsageDescription 我是经常要使用定位的原因描述",  
         "Set :NSLocationWhenInUseUsageDescription 我是需要使用定位的原因描述"  
      ]  
   }  
 }  
}
收起阅读 »

【分享】5+App的中View

分享 titleNView nativeObj nativeUI maps map Webview

5+App 中的 View 大概可以分为:

  • DOM 也就是 HTML 的内容
  • Webview 做为 HTML 的容器
  • NView 原生 View
  • Map、Video 等原生的控件
  • NativeUI 系统原生界面

层级关系

默认的层级关系 DOM < Map = Webview < NView < NativeUI

  • DOM 的层级是最低的,因此经常出现某些 HTML 的内容被其它更高层级 View 遮挡的情况。
  • Map = Webview 其实不够严谨。原生控件创建后,会与当前 Webview 建立关联关系,可以简单理解为层级一致。
  • Webview < NView 是默认的情况,如果 NView 被 append 到 Webview 的话,NView 的层级则会跟随父 Webview。
  • NativeUI 系统原生界面的层级是最高的

下面通过一些示例,来验证一下这些层级关系。

示例

这里要先提一句,一个新的 Webview 创建并且显示,默认都会置于栈顶,也就是说会在当前所有 Webview 的最上层。

地图

  • NativeUI 弹出框在 Webview 与 Map 上层
  • 新的Webview 新开一个 Webview 会遮挡包含 Map 的 Webview。

NView

  • NView 默认情况下,层级是高于所有 Webview 的。
  • 不append 此时点击“新开窗口”或“返回”,会一直看到 NView 的存在。

  • append 此时 NView 作为 Webview 的一部分存在,层级与父 Webview 一致,点击“新开窗口”或“返回”不会再看到 NView 的存在。

  • NativeUI 弹出框始终会在 NView 上层

源码

示例的具体代码,见附件。

继续阅读 »

5+App 中的 View 大概可以分为:

  • DOM 也就是 HTML 的内容
  • Webview 做为 HTML 的容器
  • NView 原生 View
  • Map、Video 等原生的控件
  • NativeUI 系统原生界面

层级关系

默认的层级关系 DOM < Map = Webview < NView < NativeUI

  • DOM 的层级是最低的,因此经常出现某些 HTML 的内容被其它更高层级 View 遮挡的情况。
  • Map = Webview 其实不够严谨。原生控件创建后,会与当前 Webview 建立关联关系,可以简单理解为层级一致。
  • Webview < NView 是默认的情况,如果 NView 被 append 到 Webview 的话,NView 的层级则会跟随父 Webview。
  • NativeUI 系统原生界面的层级是最高的

下面通过一些示例,来验证一下这些层级关系。

示例

这里要先提一句,一个新的 Webview 创建并且显示,默认都会置于栈顶,也就是说会在当前所有 Webview 的最上层。

地图

  • NativeUI 弹出框在 Webview 与 Map 上层
  • 新的Webview 新开一个 Webview 会遮挡包含 Map 的 Webview。

NView

  • NView 默认情况下,层级是高于所有 Webview 的。
  • 不append 此时点击“新开窗口”或“返回”,会一直看到 NView 的存在。

  • append 此时 NView 作为 Webview 的一部分存在,层级与父 Webview 一致,点击“新开窗口”或“返回”不会再看到 NView 的存在。

  • NativeUI 弹出框始终会在 NView 上层

源码

示例的具体代码,见附件。

收起阅读 »