由于应用universal link校验不通过?记一个打包的iOS不能分享的坑
全部步骤根据文档来,文档地址:https://uniapp.dcloud.io/api/plugins/universal-links
但是打包出来的iOS应用分享时却出现了 由于应用universal link校验不通过
不管是uniCloud 测试的域名还是自定义域名,都无法分享,这个时候只能自己私有化部署服务器来托管apple-app-site-association文件创建通用链接
第一步:开启Associated Domains服务
登录苹果开发者网站,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID,确保开启Associated Domains服务
开启Associated Domains服务后需要重新生成profile文件,提交云端打包时使用
第二步:配置Associated Domains(域名)
使用HBuilderX云端打包时在manifest.json中配置域名
在"plus" -> "distribute" -> "apple" -> "capabilities" -> "entitlements"节点(uni-app项目在"app-plus" -> "distribute" -> "ios" -> "capabilities" -> "entitlements")下添加"com.apple.developer.associated-domains"字段,字段值为字符串数组,每个字符串为要关联的域名
"capabilities": {
"entitlements": {
"com.apple.developer.associated-domains": [
"applinks:domain.com"
]
}
}
其中domain.com是应用通用链接的域名(这里不要包含path),请修改为自己应用要使用的域名
保存后提交云端打包生效。
第三步:服务器配置apple-app-site-association文件
需要在上面域名对应的服务器上放apple-app-site-association文件。
apple-app-site-association文件配置如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "*App ID Prefix*.*Bundle ID*",
"paths": [ "/ulink/*"]
}
]
}
}
apps: 必须对应一个空的数组
appID:由App ID Prefix和Bundle ID两部分组成,中间用"."连接,可以登录苹果开发者网站,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID查看
paths:对应域名中的path,用于过滤可以跳转到App的链接,支持通配符*,?以及NOT进行匹配,匹配的优先级是从左至右依次降低
注意:不要直接拷贝使用上面的示例,必须根据自己的App ID Prefix和Bundle ID修改
把配置好的apple-app-site-association文件上传到你自己的服务器,确保通过https://domain.com/.well-known/apple-app-site-association可访问。
其中domain.com为第二步配置的域名
应用安装后会通过访问上面的url向系统注册应用的通用链接。
第四步:在微信开放平台配置通用链接
打开微信开发平台,在“管理中心”页面的“移动应用”下找到已经申请的应用(没有申请应用请点击“创建移动应用”新建应用),点击“查看”打开应用详情页面。
在“开发信息”栏后点击修改,在“iOS应用”下的“Universal Links”项中配置应用的通用链接
Universal Links通用链接:https://domain.com/ulink/
其中domain.com为第二步配置的域名
第五步:在HBuilderX中配置通用链接提交云端打包
将上一步在微信开放平台配置的通用链接地址配置到应用manifest.json中,注意通用链接地址必须完全一致(本地离线打包忽略此操作)
打开项目的manifest.json文件,在“(App) SDK配置”项中的微信登录(微信分享、微信支付)下的“iOS平台通用链接(Universal Links)”中配置:
如果使用了微信分享和微信支付,也需要分别配置微信分享和微信支付下的“iOS平台通用链接(Universal Links)”,并且配置的值必须相同
Universal Links通用链接:https://domain.com/ulink/
其中domain.com为第二步配置的域名
保存后需提交云端打包生效。
至此,打包好的ipa安装包可以正常分享
参考文档:
https://ask.dcloud.net.cn/article/36393
https://ask.dcloud.net.cn/article/36445
全部步骤根据文档来,文档地址:https://uniapp.dcloud.io/api/plugins/universal-links
但是打包出来的iOS应用分享时却出现了 由于应用universal link校验不通过
不管是uniCloud 测试的域名还是自定义域名,都无法分享,这个时候只能自己私有化部署服务器来托管apple-app-site-association文件创建通用链接
第一步:开启Associated Domains服务
登录苹果开发者网站,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID,确保开启Associated Domains服务
开启Associated Domains服务后需要重新生成profile文件,提交云端打包时使用
第二步:配置Associated Domains(域名)
使用HBuilderX云端打包时在manifest.json中配置域名
在"plus" -> "distribute" -> "apple" -> "capabilities" -> "entitlements"节点(uni-app项目在"app-plus" -> "distribute" -> "ios" -> "capabilities" -> "entitlements")下添加"com.apple.developer.associated-domains"字段,字段值为字符串数组,每个字符串为要关联的域名
"capabilities": {
"entitlements": {
"com.apple.developer.associated-domains": [
"applinks:domain.com"
]
}
}
其中domain.com是应用通用链接的域名(这里不要包含path),请修改为自己应用要使用的域名
保存后提交云端打包生效。
第三步:服务器配置apple-app-site-association文件
需要在上面域名对应的服务器上放apple-app-site-association文件。
apple-app-site-association文件配置如下:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "*App ID Prefix*.*Bundle ID*",
"paths": [ "/ulink/*"]
}
]
}
}
apps: 必须对应一个空的数组
appID:由App ID Prefix和Bundle ID两部分组成,中间用"."连接,可以登录苹果开发者网站,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID查看
paths:对应域名中的path,用于过滤可以跳转到App的链接,支持通配符*,?以及NOT进行匹配,匹配的优先级是从左至右依次降低
注意:不要直接拷贝使用上面的示例,必须根据自己的App ID Prefix和Bundle ID修改
把配置好的apple-app-site-association文件上传到你自己的服务器,确保通过https://domain.com/.well-known/apple-app-site-association可访问。
其中domain.com为第二步配置的域名
应用安装后会通过访问上面的url向系统注册应用的通用链接。
第四步:在微信开放平台配置通用链接
打开微信开发平台,在“管理中心”页面的“移动应用”下找到已经申请的应用(没有申请应用请点击“创建移动应用”新建应用),点击“查看”打开应用详情页面。
在“开发信息”栏后点击修改,在“iOS应用”下的“Universal Links”项中配置应用的通用链接
Universal Links通用链接:https://domain.com/ulink/
其中domain.com为第二步配置的域名
第五步:在HBuilderX中配置通用链接提交云端打包
将上一步在微信开放平台配置的通用链接地址配置到应用manifest.json中,注意通用链接地址必须完全一致(本地离线打包忽略此操作)
打开项目的manifest.json文件,在“(App) SDK配置”项中的微信登录(微信分享、微信支付)下的“iOS平台通用链接(Universal Links)”中配置:
如果使用了微信分享和微信支付,也需要分别配置微信分享和微信支付下的“iOS平台通用链接(Universal Links)”,并且配置的值必须相同
Universal Links通用链接:https://domain.com/ulink/
其中domain.com为第二步配置的域名
保存后需提交云端打包生效。
至此,打包好的ipa安装包可以正常分享
参考文档:
https://ask.dcloud.net.cn/article/36393
https://ask.dcloud.net.cn/article/36445
uniapp 使用 vuedraggable^2.24.3 时的监听报错解决分享
原解决方案来源 使用vuedraggable时 ... "Cannot read property 'id' of null"
按照 j***@qq.com 评论的解决方案修改了文件后,vuedraggable 库重新 build 一下,但是这只能解决一时的问题,下次重新编译项目时又会被覆盖掉
解决:使用 patch-package 修复并保留对依赖库的修改
- 安装
yarn add patch-package postinstall-postinstall(patch-package 为主体,postinstall 可在项目编译时自动修复依赖) - 项目的 package.json 的 scripts 中添加
"postinstall": "patch-package" - 进入
node_modules/vuedraggable后先安装下依赖,然后修改vuedraggable.js第 31 行function emit(evtName, evtData) { this.$nextTick(() => this.$emit(evtName.toLowerCase(), {...evtData})); // <- } - 执行
yarn build - 删除
node_modules/vuedraggable下的node_modules和yarn.lock - 项目根目录下执行
yarn patch-package vuedraggable,此时根目录下会多一个patches文件夹,里面有对依赖某个版本的修改记录 - 即可
原解决方案来源 使用vuedraggable时 ... "Cannot read property 'id' of null"
按照 j***@qq.com 评论的解决方案修改了文件后,vuedraggable 库重新 build 一下,但是这只能解决一时的问题,下次重新编译项目时又会被覆盖掉
解决:使用 patch-package 修复并保留对依赖库的修改
- 安装
yarn add patch-package postinstall-postinstall(patch-package 为主体,postinstall 可在项目编译时自动修复依赖) - 项目的 package.json 的 scripts 中添加
"postinstall": "patch-package" - 进入
node_modules/vuedraggable后先安装下依赖,然后修改vuedraggable.js第 31 行function emit(evtName, evtData) { this.$nextTick(() => this.$emit(evtName.toLowerCase(), {...evtData})); // <- } - 执行
yarn build - 删除
node_modules/vuedraggable下的node_modules和yarn.lock - 项目根目录下执行
yarn patch-package vuedraggable,此时根目录下会多一个patches文件夹,里面有对依赖某个版本的修改记录 - 即可
uniapp打包上架遇到要求SDK权限延后处理的问题
uniapp的坑也是不少,个人也是第一次开发安卓端的app,因此遇到的问题也是不少,特此记录一下。
此文章要记录的是关于应用宝上架遇到的问题(包括vivo平台),要求是权限请求必须在用户同意用户协议和隐私权限后才行。我当时是在首页里加入了一个弹窗,在第一次进入app时调用打开弹窗,就这样打包提交平台审核,然后回了一整页的隐私权限问题。
看到这个我人都要看傻了,这都啥啊?在百度了无数东西之后,终于发现了一个最重要的问题,权限请求必须在用户同意用户协议和隐私权限后!
可是我已点开app权限就开始请求啊,比如请求手机的通话状态、请求写入手机内部文件存储,然后才到我的首页去打开隐私协议弹窗,这压根没法子啊?于是去QQ官群问,技术群问,奈何没人回我(可能是我菜?)
就这个时候我点开了人家的app,清空数据后重新进入,诶?人家的都是弹窗先出来,然后再请求权限。
难道是我菜?于是怀着不平的心情,继续挖百度,终于是让我挖到了:
Android平台隐私与政策提示框配置方法
配置方式
打开项目的manifest.json文件,切换到“源码视图”项
uni-app项目
在 "app-plus" -> "privacy" 节点下添加 prompt节点
"privacy": {
"prompt": "template",
"template": {
"title": "服务协议和隐私政策",
"message": " 请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/> 你可阅读<a href=\"https:\//www.xxx.com\">《用户协议》</a>和<a href=\"https:\//www.xxx.com\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept": "同意",
"buttonRefuse": "暂不同意",
"second": {
"title": "温馨提示",
"message": " 进入应用前,你需先同意<a href=\"https:\//www.xxx.com\">《服务协议》</a>和<a href=\"https:\//www.xxx.com\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept": "同意并继续",
"buttonRefuse": "退出应用",
}
}
}
这个就是在启动页就能出现的弹窗提示框,按配置进行即可(不看文档的坑!!!)
文档链接:
完成之后需要重新云端打包后才能生效
uniapp的坑也是不少,个人也是第一次开发安卓端的app,因此遇到的问题也是不少,特此记录一下。
此文章要记录的是关于应用宝上架遇到的问题(包括vivo平台),要求是权限请求必须在用户同意用户协议和隐私权限后才行。我当时是在首页里加入了一个弹窗,在第一次进入app时调用打开弹窗,就这样打包提交平台审核,然后回了一整页的隐私权限问题。
看到这个我人都要看傻了,这都啥啊?在百度了无数东西之后,终于发现了一个最重要的问题,权限请求必须在用户同意用户协议和隐私权限后!
可是我已点开app权限就开始请求啊,比如请求手机的通话状态、请求写入手机内部文件存储,然后才到我的首页去打开隐私协议弹窗,这压根没法子啊?于是去QQ官群问,技术群问,奈何没人回我(可能是我菜?)
就这个时候我点开了人家的app,清空数据后重新进入,诶?人家的都是弹窗先出来,然后再请求权限。
难道是我菜?于是怀着不平的心情,继续挖百度,终于是让我挖到了:
Android平台隐私与政策提示框配置方法
配置方式
打开项目的manifest.json文件,切换到“源码视图”项
uni-app项目
在 "app-plus" -> "privacy" 节点下添加 prompt节点
"privacy": {
"prompt": "template",
"template": {
"title": "服务协议和隐私政策",
"message": " 请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/> 你可阅读<a href=\"https:\//www.xxx.com\">《用户协议》</a>和<a href=\"https:\//www.xxx.com\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept": "同意",
"buttonRefuse": "暂不同意",
"second": {
"title": "温馨提示",
"message": " 进入应用前,你需先同意<a href=\"https:\//www.xxx.com\">《服务协议》</a>和<a href=\"https:\//www.xxx.com\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept": "同意并继续",
"buttonRefuse": "退出应用",
}
}
}
这个就是在启动页就能出现的弹窗提示框,按配置进行即可(不看文档的坑!!!)
文档链接:
完成之后需要重新云端打包后才能生效
Uniapp发布为H5版本时如何隐藏访问路径的#符号
在使用Uniapp发布为H5端时,我们的页面访问路径都会带上一个“#”号,这个不仅影响美观,还会在某些场合被过滤到“#”号导致路由错误,比如我们在做H5端的微信公众号登录的时候,返回地址带有“#”号就会被自动过滤掉,导致无法回调到正确页面,解决办法如下:
一、使用Hbuilder 工具打开manifest.json 文件,定位到:H5配置->路由模式->选择 history 模式
二、服务器配置
打包好H5代码上传到服务器还需要做伪静态的配置。
history模式下配置nginx
location / {
try_files $uri $uri/ /index.html;
}
history模式下配置Apache
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
三、经过以上处理之后,我们原先的H5端的访问地址:https://h5.shopwind.net/#/pages/index/index 就会自动转化为:https://h5.shopwind.net/pages/index/index , 已经完美的去掉了“#”符合,并且我们在填写微信公众号登录的回调地址后,能正常跳回。
在使用Uniapp发布为H5端时,我们的页面访问路径都会带上一个“#”号,这个不仅影响美观,还会在某些场合被过滤到“#”号导致路由错误,比如我们在做H5端的微信公众号登录的时候,返回地址带有“#”号就会被自动过滤掉,导致无法回调到正确页面,解决办法如下:
一、使用Hbuilder 工具打开manifest.json 文件,定位到:H5配置->路由模式->选择 history 模式
二、服务器配置
打包好H5代码上传到服务器还需要做伪静态的配置。
history模式下配置nginx
location / {
try_files $uri $uri/ /index.html;
}
history模式下配置Apache
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
三、经过以上处理之后,我们原先的H5端的访问地址:https://h5.shopwind.net/#/pages/index/index 就会自动转化为:https://h5.shopwind.net/pages/index/index , 已经完美的去掉了“#”符合,并且我们在填写微信公众号登录的回调地址后,能正常跳回。
收起阅读 »旧版HBuilder X(3.2.1以前的版本)创建的uni-app开发快手小程序指南
最新版的HBuilderX(3.2.1+版本)创建的uni-app项目,已经支持直接在编辑器菜单:运行/发行快手小程序
====================================
我们强烈建议通过升级HBuilderX至3.2.1+版本,开发快手小程序。
如下介绍的开发方式,主要针对旧版编辑器不支持直接运行到快手小程序。
如果由于特殊原因,你仍然坚持使用旧版HBuilderX(3.2.1以前的版本),那样你只能通过cli方式创建uni-app项目才能运行到快手小程序。
步骤如下:
准备工作:
1.安装快手开发者工具,点此下载
2.cli创建uni-app。详情:通过vue-cli命令行
如果你的项目是由hbuilderx创建的,需要先转成cli项目。详情:uni-app HBuilderX 工程与 vue-cli 工程相互转换
运行快手小程序:
npm run dev:mp-kuaishou
3.打开快手开发者工具,点击导入。目录:cli创建的uni-app项目/dist/dev/mp-kuaishou
提醒:命令行创建uni-app,推荐使用alpha版(对应HBuilderX最新alpha版)。该版本的快手小程序更稳定。
如果你是早期创建的升级方式 点击:修改依赖为指定版本
最新版的HBuilderX(3.2.1+版本)创建的uni-app项目,已经支持直接在编辑器菜单:运行/发行快手小程序
====================================
我们强烈建议通过升级HBuilderX至3.2.1+版本,开发快手小程序。
如下介绍的开发方式,主要针对旧版编辑器不支持直接运行到快手小程序。
如果由于特殊原因,你仍然坚持使用旧版HBuilderX(3.2.1以前的版本),那样你只能通过cli方式创建uni-app项目才能运行到快手小程序。
步骤如下:
准备工作:
1.安装快手开发者工具,点此下载
2.cli创建uni-app。详情:通过vue-cli命令行
如果你的项目是由hbuilderx创建的,需要先转成cli项目。详情:uni-app HBuilderX 工程与 vue-cli 工程相互转换
运行快手小程序:
npm run dev:mp-kuaishou
3.打开快手开发者工具,点击导入。目录:cli创建的uni-app项目/dist/dev/mp-kuaishou
提醒:命令行创建uni-app,推荐使用alpha版(对应HBuilderX最新alpha版)。该版本的快手小程序更稳定。
如果你是早期创建的升级方式 点击:修改依赖为指定版本
uni.createInnerAudioContext() 报错{"errMsg":"MediaError","errCode":-5}解决方案
接了腾讯的tim 现在遇到了ios播放不了tim返回的音频链接报错{"errMsg":"MediaError","errCode":-5} 但是经过自己的摸索 发现video可以播放 所以写一系列骚操作
个人感觉是uniapp的uni.createInnerAudioContext()事件底层 ios原生这块的io报错 也求官方早日修复吧
不多说 直接上代码
<template>
<video
:id="payload.uuid"
:muted="isFirstLoad"//第一次获取音频时长静音播放
style="display: none;"
:src="payload.url"
@timeupdate="handleTimeUp"//第一次获取音频时长事件
/>
</template>
<script>
export default {
props: {
payload: {
type: Object,
required: true
}
},
methods:{
handleTimeUp(e) {
const { duration } = e.detail
if (this.isFirstLoad) {
this.videoContext.pause()
this.second = duration.toFixed(0)
this.isFirstLoad = false
}
},}
}
</script>
剩下的播放就不多说了 记录一下坑 日后给需要的兄弟
接了腾讯的tim 现在遇到了ios播放不了tim返回的音频链接报错{"errMsg":"MediaError","errCode":-5} 但是经过自己的摸索 发现video可以播放 所以写一系列骚操作
个人感觉是uniapp的uni.createInnerAudioContext()事件底层 ios原生这块的io报错 也求官方早日修复吧
不多说 直接上代码
<template>
<video
:id="payload.uuid"
:muted="isFirstLoad"//第一次获取音频时长静音播放
style="display: none;"
:src="payload.url"
@timeupdate="handleTimeUp"//第一次获取音频时长事件
/>
</template>
<script>
export default {
props: {
payload: {
type: Object,
required: true
}
},
methods:{
handleTimeUp(e) {
const { duration } = e.detail
if (this.isFirstLoad) {
this.videoContext.pause()
this.second = duration.toFixed(0)
this.isFirstLoad = false
}
},}
}
</script>
剩下的播放就不多说了 记录一下坑 日后给需要的兄弟
收起阅读 »郑州工作室接外包项目
app
小程序
pc官网
语言:
uni-app
原生安卓 ios
php
有意向联系微信ciyujuzi
app
小程序
pc官网
语言:
uni-app
原生安卓 ios
php
有意向联系微信ciyujuzi
subNVue的一些实验
最近在熟悉uni-app的api,准备在demo里使用遮罩层,找官方文档,一顿搜索点到了subNVue,于是跟着开发指南和文档用subNVue写一个遮罩试试(毕竟官方说这个很强大,可以盖住原生组件,还能实现内部滚动)。
根据我的测试结果,如果仅仅根据uni-app的文档,我不能写出一个令自己满意的遮罩层,比如说,你不能阻止手机上的虚拟返回键关闭遮罩,你不能自己控制是否通过点击遮罩关闭遮罩层。
根据文档中的一些线索:
- ‘Android平台4.0以上系统才支持“transparent”背景透明样式’。
-
除 popup 外,其他值域参考 5+ webview position 文档。
去查看H5+的webview文档(subNVue是对H5+webview的一层封装,但是封装的功能不全,要真正发挥subNVue的强大功能还是要结合plus对象)。
下面是我的测试代码():
在page.json里添加如下配置:{ "path": "pages/tabBar/home/home", "style": { "enablePullDownRefresh": false, "navigationStyle": "default", "navigationBarTitleText": "Home", "app-plus": { "titleNView": { // 标题栏样式 // "homeButton": true, "buttons": [ { "type": "back", "float": "left" }, ] }, "subNVues":[{ "id": "test", // 唯一标识 "path": "/paltform/app-plus/subNVue/overlay", // 页面路径 "type": "popup", "style": { // 应该对应的是H5+中的webviewStyle "position": "absolute", "dock": "right", "width": "100upx", "height": "150upx", // "background": "rgba(0,0,0,0.5)", "mask": "none",//mask的值很重要,设置成none点击遮罩不会再关闭遮罩了 "backButtonAutoControl": "none" // 如果值是quit点击虚拟返回键会直接退出app } }] } } }overlay.vue:
<template>
<view class="tt">
<image class="swiper-item home-banner-item" mode="widthFix" src="https://pic2.zhimg.com/v2-25f301124c7524029d043a038655c829_1440w.jpg?source=172ae18b"></image>
</view>
</template>
<script>
export default {
data() {
return {
}
},
onLoad: function () {
const subNVue = uni.getCurrentSubNVue(); // subNVue对应的webview 对象
console.log(plus.webview.currentWebview().id); // package.json里设置的subNVue的id
console.log(subNVue.id); // package.json里设置的subNVue的id
console.log(plus.webview.currentWebview().opener());//创建subNVue对应的webview 的父webview,与 home.vue的webview是同一个webview
subNVue.canBack(function(e){
console.log('是否可返回:'+e.canBack);
});
// subNVue.addEventListener('hide', function(){
// // subNVue.setStyle({mask:'rgba(0,0,0,1)'});
// console.log(123000);
// },false);
// console.log(subNVue.parent());
subNVue.setStyle({
background: '#ff4050',
})
plus.key.addEventListener('backbutton',function() {
console.log('backbutton'); // 这个可以拦截手机上的虚拟返回键
return true;
})
},
onUnload:function(){
},
onBackPress() {
return true; // 这个貌似不起作用
},
methods: {
}
}
</script>
<style>
</style>
只是初步测试,希望uni-app官方能把文档给写清楚,不要让开发者猜,提高大家的工作效率。
最近在熟悉uni-app的api,准备在demo里使用遮罩层,找官方文档,一顿搜索点到了subNVue,于是跟着开发指南和文档用subNVue写一个遮罩试试(毕竟官方说这个很强大,可以盖住原生组件,还能实现内部滚动)。
根据我的测试结果,如果仅仅根据uni-app的文档,我不能写出一个令自己满意的遮罩层,比如说,你不能阻止手机上的虚拟返回键关闭遮罩,你不能自己控制是否通过点击遮罩关闭遮罩层。
根据文档中的一些线索:
- ‘Android平台4.0以上系统才支持“transparent”背景透明样式’。
-
除 popup 外,其他值域参考 5+ webview position 文档。
去查看H5+的webview文档(subNVue是对H5+webview的一层封装,但是封装的功能不全,要真正发挥subNVue的强大功能还是要结合plus对象)。
下面是我的测试代码():
在page.json里添加如下配置:{ "path": "pages/tabBar/home/home", "style": { "enablePullDownRefresh": false, "navigationStyle": "default", "navigationBarTitleText": "Home", "app-plus": { "titleNView": { // 标题栏样式 // "homeButton": true, "buttons": [ { "type": "back", "float": "left" }, ] }, "subNVues":[{ "id": "test", // 唯一标识 "path": "/paltform/app-plus/subNVue/overlay", // 页面路径 "type": "popup", "style": { // 应该对应的是H5+中的webviewStyle "position": "absolute", "dock": "right", "width": "100upx", "height": "150upx", // "background": "rgba(0,0,0,0.5)", "mask": "none",//mask的值很重要,设置成none点击遮罩不会再关闭遮罩了 "backButtonAutoControl": "none" // 如果值是quit点击虚拟返回键会直接退出app } }] } } }overlay.vue:
<template>
<view class="tt">
<image class="swiper-item home-banner-item" mode="widthFix" src="https://pic2.zhimg.com/v2-25f301124c7524029d043a038655c829_1440w.jpg?source=172ae18b"></image>
</view>
</template>
<script>
export default {
data() {
return {
}
},
onLoad: function () {
const subNVue = uni.getCurrentSubNVue(); // subNVue对应的webview 对象
console.log(plus.webview.currentWebview().id); // package.json里设置的subNVue的id
console.log(subNVue.id); // package.json里设置的subNVue的id
console.log(plus.webview.currentWebview().opener());//创建subNVue对应的webview 的父webview,与 home.vue的webview是同一个webview
subNVue.canBack(function(e){
console.log('是否可返回:'+e.canBack);
});
// subNVue.addEventListener('hide', function(){
// // subNVue.setStyle({mask:'rgba(0,0,0,1)'});
// console.log(123000);
// },false);
// console.log(subNVue.parent());
subNVue.setStyle({
background: '#ff4050',
})
plus.key.addEventListener('backbutton',function() {
console.log('backbutton'); // 这个可以拦截手机上的虚拟返回键
return true;
})
},
onUnload:function(){
},
onBackPress() {
return true; // 这个貌似不起作用
},
methods: {
}
}
</script>
<style>
</style>
只是初步测试,希望uni-app官方能把文档给写清楚,不要让开发者猜,提高大家的工作效率。
收起阅读 »




