
关于uni-app,使用企业微信的经验小谈。
wx.config wx.agentConfig undefined 的问提。
原因: 是uni-app自身在window下面挂载了wx的全局变量。导致微信引入的二个js,wx异常。
解决办法: 在App.vue 中,onLaunch 加载方法中,动态引入这二个js。这个方法只支持 h5 开发
onLaunch: function () {
let that = this;
const script1 = document.createElement("script");
script1.setAttribute("type", "text/javascript");
script1.setAttribute("referrerpolicy", "origin");
script1.setAttribute("src", "https://res.wx.qq.com/open/js/jweixin-1.2.0.js");
document.head.appendChild(script1);
script1.onload = function () {
const script2 = document.createElement("script");
script2.setAttribute("type", "text/javascript");
script2.setAttribute("referrerpolicy", "origin");
script2.setAttribute("src", "https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js");
document.head.appendChild(script2);
script2.onload = () => {
// 执行wx.config的逻辑
};
};
}
wx.config 方法 和 wx.agentConfig 方法如何使用
因为我自己在这一步上面卡了很久,所以把自己现在写的分享出来
// 这个api其实是我的接口地址,www.xxxx.com/api/
import { api } from "./request.api";
let obj = {
async registered() {
let token = uni.getStorageSync("token");
let data = await new Promise((res) => {
uni.request({
url: api + "work/GetOPenTenantDataConfig",
method: "get",
data: {
auth_token: token
},
success: ({ data }) => {
res(data.result);
}
});
});
wx.config({
beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: data.corpid, // 必填,企业微信的corpID
timestamp: data.timeStamp, // 必填,生成签名的时间戳
nonceStr: data.noncestr, // 必填,生成签名的随机串
signature: data.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
jsApiList: [] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
});
wx.ready(() => {
obj.agentConfig(token);
});
wx.error(function (res) {
console.log(res);
});
},
async agentConfig(token) {
let data = await new Promise((res) => {
uni.request({
url: api + "work/GetOPenAgentDataConfig",
method: "get",
data: {
auth_token: token
},
success: ({ data }) => {
res(data.result);
}
});
});
wx.agentConfig({
corpid: data.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致
agentid: data.agentid, // 必填,企业微信的应用id (e.g. 1000247)
timestamp: data.timeStamp, // 必填,生成签名的时间戳
nonceStr: data.noncestr, // 必填,生成签名的随机串
signature: data.signature, // 必填,签名,见附录1
jsApiList: [],
success: (res) => {
console.log(res);
},
fail: (error) => {
console.log(error);
}
});
}
};
module.exports = obj;
user组件 我的需求是只需要显示名称就好了。
<template>
<ww-open-data type="userName" :openid="openid" />
</template>
<script>
export default {
props: ["openid"], // 特别提醒 这里的openid 其实就是用户的userid。后台以为需要userid转成openid。导致在这个小问题上,调试了很久。
mounted() {
WWOpenData.bind(document.querySelectorAll("ww-open-data"));
}
};
</script>
wx.config wx.agentConfig undefined 的问提。
原因: 是uni-app自身在window下面挂载了wx的全局变量。导致微信引入的二个js,wx异常。
解决办法: 在App.vue 中,onLaunch 加载方法中,动态引入这二个js。这个方法只支持 h5 开发
onLaunch: function () {
let that = this;
const script1 = document.createElement("script");
script1.setAttribute("type", "text/javascript");
script1.setAttribute("referrerpolicy", "origin");
script1.setAttribute("src", "https://res.wx.qq.com/open/js/jweixin-1.2.0.js");
document.head.appendChild(script1);
script1.onload = function () {
const script2 = document.createElement("script");
script2.setAttribute("type", "text/javascript");
script2.setAttribute("referrerpolicy", "origin");
script2.setAttribute("src", "https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js");
document.head.appendChild(script2);
script2.onload = () => {
// 执行wx.config的逻辑
};
};
}
wx.config 方法 和 wx.agentConfig 方法如何使用
因为我自己在这一步上面卡了很久,所以把自己现在写的分享出来
// 这个api其实是我的接口地址,www.xxxx.com/api/
import { api } from "./request.api";
let obj = {
async registered() {
let token = uni.getStorageSync("token");
let data = await new Promise((res) => {
uni.request({
url: api + "work/GetOPenTenantDataConfig",
method: "get",
data: {
auth_token: token
},
success: ({ data }) => {
res(data.result);
}
});
});
wx.config({
beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: data.corpid, // 必填,企业微信的corpID
timestamp: data.timeStamp, // 必填,生成签名的时间戳
nonceStr: data.noncestr, // 必填,生成签名的随机串
signature: data.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
jsApiList: [] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
});
wx.ready(() => {
obj.agentConfig(token);
});
wx.error(function (res) {
console.log(res);
});
},
async agentConfig(token) {
let data = await new Promise((res) => {
uni.request({
url: api + "work/GetOPenAgentDataConfig",
method: "get",
data: {
auth_token: token
},
success: ({ data }) => {
res(data.result);
}
});
});
wx.agentConfig({
corpid: data.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致
agentid: data.agentid, // 必填,企业微信的应用id (e.g. 1000247)
timestamp: data.timeStamp, // 必填,生成签名的时间戳
nonceStr: data.noncestr, // 必填,生成签名的随机串
signature: data.signature, // 必填,签名,见附录1
jsApiList: [],
success: (res) => {
console.log(res);
},
fail: (error) => {
console.log(error);
}
});
}
};
module.exports = obj;
user组件 我的需求是只需要显示名称就好了。
<template>
<ww-open-data type="userName" :openid="openid" />
</template>
<script>
export default {
props: ["openid"], // 特别提醒 这里的openid 其实就是用户的userid。后台以为需要userid转成openid。导致在这个小问题上,调试了很久。
mounted() {
WWOpenData.bind(document.querySelectorAll("ww-open-data"));
}
};
</script>
收起阅读 »

mui ajax 请求 在ios13后出现 abort 问题
前些天调试项目,原本在Android端开发后的代码,发现在ios13就请求不了,查了文档才发现
为适应iOS13起苹果公司将UIWebview列为私有API的问题,从HBuilderX 2.2.5+版本已将iOS上默认内核由UIWebview调整为WKWebview。但WKWebview有更严格的跨域限制,普通xhr或ajax联网会报错:Script error.filename:lineno:0错误;此时必须使用plus.net.XMLHttpRequest,详见:https://ask.dcloud.net.cn/article/36348,所以在WKWebview下,请务必在plus ready后再调用mui.ajax,(注意这一句,plus reday 后才执行
后来我根据上述调整了代码
mui.plusReady(function() {
mui.ajax('http://server-name/login.php',{
data:{
username:'username',
password:'password'
},
dataType:'json',//服务器返回json格式数据
type:'post',//HTTP请求类型
timeout:10000,//超时时间设置为10秒;
headers:{'Content-Type':'application/json'},
success:function(data){
//服务器返回响应,根据响应结果,分析是否登录成功;
...
},
error:function(xhr,type,errorThrown){
//异常处理;
console.log(type);
}
});
});
发现还是报错,后面经过查询其他贴纸发现,在mui.ajax 还需要加上crossDomain : true //强制5+ 跨域后解决!!!
mui.plusReady(function() {
mui.ajax('http://server-name/login.php',{
data:{
username:'username',
password:'password'
},
dataType:'json',//服务器返回json格式数据
type:'post',//HTTP请求类型
timeout:10000,//超时时间设置为10秒;
crossDomain: true, //强制使用5+跨域
headers:{'Content-Type':'application/json'},
success:function(data){
//服务器返回响应,根据响应结果,分析是否登录成功;
...
},
error:function(xhr,type,errorThrown){
//异常处理;
console.log(type);
}
});
});
前些天调试项目,原本在Android端开发后的代码,发现在ios13就请求不了,查了文档才发现
为适应iOS13起苹果公司将UIWebview列为私有API的问题,从HBuilderX 2.2.5+版本已将iOS上默认内核由UIWebview调整为WKWebview。但WKWebview有更严格的跨域限制,普通xhr或ajax联网会报错:Script error.filename:lineno:0错误;此时必须使用plus.net.XMLHttpRequest,详见:https://ask.dcloud.net.cn/article/36348,所以在WKWebview下,请务必在plus ready后再调用mui.ajax,(注意这一句,plus reday 后才执行
后来我根据上述调整了代码
mui.plusReady(function() {
mui.ajax('http://server-name/login.php',{
data:{
username:'username',
password:'password'
},
dataType:'json',//服务器返回json格式数据
type:'post',//HTTP请求类型
timeout:10000,//超时时间设置为10秒;
headers:{'Content-Type':'application/json'},
success:function(data){
//服务器返回响应,根据响应结果,分析是否登录成功;
...
},
error:function(xhr,type,errorThrown){
//异常处理;
console.log(type);
}
});
});
发现还是报错,后面经过查询其他贴纸发现,在mui.ajax 还需要加上crossDomain : true //强制5+ 跨域后解决!!!
mui.plusReady(function() {
mui.ajax('http://server-name/login.php',{
data:{
username:'username',
password:'password'
},
dataType:'json',//服务器返回json格式数据
type:'post',//HTTP请求类型
timeout:10000,//超时时间设置为10秒;
crossDomain: true, //强制使用5+跨域
headers:{'Content-Type':'application/json'},
success:function(data){
//服务器返回响应,根据响应结果,分析是否登录成功;
...
},
error:function(xhr,type,errorThrown){
//异常处理;
console.log(type);
}
});
});
收起阅读 »

uniapp苹果支付教程
在网上找了很多教程,但是说的都不太完整,这里整合一下整个uniapp苹果支付完整流程,希望可以帮到和我一样正在做苹果支付的人。
发布内容时老警告我非法内容,懒得检查了,转pdf大家自己下载看吧
在网上找了很多教程,但是说的都不太完整,这里整合一下整个uniapp苹果支付完整流程,希望可以帮到和我一样正在做苹果支付的人。
发布内容时老警告我非法内容,懒得检查了,转pdf大家自己下载看吧

nvue iconfont字体图标动态传值显示乱码的解决方案
1:
// #ifdef APP-NVUE
let domModule = weex.requireModule('dom');
domModule.addRule('fontFace', {
'fontFamily': "iconfont",
'src': "url('http://at.alicdn.com/t/font_2266921_ddw3omdnbij.ttf')"
})
// #endif
2:
<style lang="scss">
/* #ifdef APP-NVUE */
.iconfont {
font-family: iconfont;
}
/* #endif */
</style>
3:
<text class="iconfont" :style="iconStyle">{{name}}</text>
4:
name传递的值必须是 “\u”+字体图标的16进制unicode码
16进制unicode码怎么看---点击字体图标的编辑按钮
如:收藏字体图标的16进制unicode为e64d,那么传值为\ue64d
bug:测试出来的bug -- 组件传递参数其值不能直接写在组件上,需要通过变量传递,否则无效 这么说好像不是很明确,上代码
<a icon="\ue64d"></a> 无效
<a :icon="'\ue64d'"><a> 有效
<a :icon="searchicon"><a> 有效
data () {
return {
searchicon: "\ue64d"
}
}
1:
// #ifdef APP-NVUE
let domModule = weex.requireModule('dom');
domModule.addRule('fontFace', {
'fontFamily': "iconfont",
'src': "url('http://at.alicdn.com/t/font_2266921_ddw3omdnbij.ttf')"
})
// #endif
2:
<style lang="scss">
/* #ifdef APP-NVUE */
.iconfont {
font-family: iconfont;
}
/* #endif */
</style>
3:
<text class="iconfont" :style="iconStyle">{{name}}</text>
4:
name传递的值必须是 “\u”+字体图标的16进制unicode码
16进制unicode码怎么看---点击字体图标的编辑按钮
如:收藏字体图标的16进制unicode为e64d,那么传值为\ue64d
bug:测试出来的bug -- 组件传递参数其值不能直接写在组件上,需要通过变量传递,否则无效 这么说好像不是很明确,上代码
<a icon="\ue64d"></a> 无效
<a :icon="'\ue64d'"><a> 有效
<a :icon="searchicon"><a> 有效
data () {
return {
searchicon: "\ue64d"
}
}
收起阅读 »

官方的slider组件可以增加一个自定义value的功能吗
https://uniapp.dcloud.io/component/slider?id=slider
slider滑块组件value值只能显示纯数字,不支持显示单位、百分号等等
这个经常需要用到,自己在插件市场里找了几个,都经常出问题,
试问官方组件能否给添加一下,此功能,造福千千万uniapp开发者
谢谢
https://uniapp.dcloud.io/component/slider?id=slider
slider滑块组件value值只能显示纯数字,不支持显示单位、百分号等等
这个经常需要用到,自己在插件市场里找了几个,都经常出问题,
试问官方组件能否给添加一下,此功能,造福千千万uniapp开发者
谢谢
收起阅读 »
这是一个关于HBuliderX软件使用修改建议的文章
软件有个《文件-> 打开多窗口项目》的功能,这个如果打开多了,但是其他有些的可能同名的项目或者已经不再开发项目,就是出现混淆或者杂乱,删又删不掉。也移除不了,希望官网可以调整一下这个功能。可以移除部分项目
软件有个《文件-> 打开多窗口项目》的功能,这个如果打开多了,但是其他有些的可能同名的项目或者已经不再开发项目,就是出现混淆或者杂乱,删又删不掉。也移除不了,希望官网可以调整一下这个功能。可以移除部分项目

H5 css postion定位问题
移动端:不推荐使用sticky定位
Android手机微信浏览器页面滑动时会抖动
可能是浏览器兼容性问题
网上说的各种方案都不用试,亲测无效,都是水。
推荐使用fixed定位
自动吸顶
可试试如下方案:
直接使用滚动监听进行动态赋值
<template>
<view>
...
...
<view class="container" :style="{postion: postion}">
</view>
</view>
</template>
data(){
return{
postion: static,
}
},
methods:{
onPageScroll : function(e) { //nvue暂不支持滚动监听,可用bindingx代替
console.log("滚动距离为:" + e.scrollTop); //判断滚动距离赋值替换postion属性
if(e.scrollTop >= 200){
this.postion = 'fixed'
}else{
this.postion = 'static'
},
}
...
...
.container{
width: 200rpx;
box-sizing: border-box;
top: 44px;
z-index: 1;
}
移动端:不推荐使用sticky定位
Android手机微信浏览器页面滑动时会抖动
可能是浏览器兼容性问题
网上说的各种方案都不用试,亲测无效,都是水。
推荐使用fixed定位
自动吸顶
可试试如下方案:
直接使用滚动监听进行动态赋值
<template>
<view>
...
...
<view class="container" :style="{postion: postion}">
</view>
</view>
</template>
data(){
return{
postion: static,
}
},
methods:{
onPageScroll : function(e) { //nvue暂不支持滚动监听,可用bindingx代替
console.log("滚动距离为:" + e.scrollTop); //判断滚动距离赋值替换postion属性
if(e.scrollTop >= 200){
this.postion = 'fixed'
}else{
this.postion = 'static'
},
}
...
...
.container{
width: 200rpx;
box-sizing: border-box;
top: 44px;
z-index: 1;
}
收起阅读 »

「亲测有效」Java JDK 生成带有 md5 签名的安卓证书
刚入门 uniapp 不久,之前也没用过 java 开发程序,对其不了解;
在打包时就踩坑了,发现安装的 jdk 生成的证书不带 md5 签名,折腾半天,为了先测试 apk 包就去了某在线生成的网站弄了一个。
今天,花了些时间做了下功果,发现从新版 java 的 jdk 已经不支持 md5 了,仅支持 sha1,sha256 两种签名。
所以,就想到安装旧版本,用 jdk 1.8 版做了测试,生成了带有 md5 签名的证名,分享给像我一样刚入门的新手!
1. 先卸载新版 java 和 jdk (仅应用于 mac 系统,其它系统请问度娘)
sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Oracle/Java
#查找当前 jdk 版本
ls /Library/Java/JavaVirtualMachines/
#删除对应的版本,替换成对应的文件名
sudo rm -rf /Library/Java/JavaVirtualMachines/[文件名].jdk
2. 下载旧版本
打开下面网址后,搜索:8u202 ,选自已操作系统的版本下载
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
3. 安装,搞定!
我特地重新拿证书做了一次云打包,正常打包!
4. 其它:查看安装后的版本
java -version
刚入门 uniapp 不久,之前也没用过 java 开发程序,对其不了解;
在打包时就踩坑了,发现安装的 jdk 生成的证书不带 md5 签名,折腾半天,为了先测试 apk 包就去了某在线生成的网站弄了一个。
今天,花了些时间做了下功果,发现从新版 java 的 jdk 已经不支持 md5 了,仅支持 sha1,sha256 两种签名。
所以,就想到安装旧版本,用 jdk 1.8 版做了测试,生成了带有 md5 签名的证名,分享给像我一样刚入门的新手!
1. 先卸载新版 java 和 jdk (仅应用于 mac 系统,其它系统请问度娘)
sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Oracle/Java
#查找当前 jdk 版本
ls /Library/Java/JavaVirtualMachines/
#删除对应的版本,替换成对应的文件名
sudo rm -rf /Library/Java/JavaVirtualMachines/[文件名].jdk
2. 下载旧版本
打开下面网址后,搜索:8u202 ,选自已操作系统的版本下载
https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
3. 安装,搞定!
我特地重新拿证书做了一次云打包,正常打包!
4. 其它:查看安装后的版本
java -version
收起阅读 »

如何编译uniapp到微信、支付宝小程序插件
小程序插件开发
平台差异说明
微信小程序 | 支付宝小程序 | 百度小程序 | 字节跳动小程序 | QQ 小程序 | 快手小程序 |
---|---|---|---|---|---|
√ | √ | x | x | x | x |
注意
- 开发
微信小程序插件
时,基础库版本1.9.6
开始支持。(如果插件包含页面,则需要基础库版本2.1.0
。) - 开发
支付宝小程序插件
时,IDE 版本要求在 0.60 及以上
插件目录结构
plugin
├── components // 插件提供的自定义组件(可以有多个)
│ ├── hello-component.js
│ ├── hello-component.json
│ ├── hello-component.wxml
│ └── hello-component.wxss
├── pages
│ ├── hello-page.js // 插件提供的页面(可以有多个)
│ ├── hello-page.json
│ ├── hello-page.wxml
│ └── hello-page.wxss
├── index.js // 插件的 js 接口
└── plugin.json // 插件配置文件
插件配置文件
向第三方小程序开放的所有组件、页面和 js 接口都必须在 plugin.json 中声明
-
mp-weixin
{ "publicComponents": { "hello-component": "components/hello-component" }, "pages": { "hello-page": "pages/hello-page" }, "main": "index.js" }
每个配置的含义如下:
publicComponents
:列出所有向小程序开放的自定义组件。pages
:列出所有向小程序开放的页面。main
:插件面向第三方小程序的 js 接口。
-
mp-alipay
{ "publicComponents": { "hello-component": "components/hello-component" }, "publicPages": { "hello-pages": "pages/hello-page" }, "pages": [ "pages/hello-page" "pages/index" ], "main": "index.js" }
每个配置的含义如下:
publicComponents
:列出所有向小程序开放的自定义组件。publicPages
:列出所有向小程序开放的页面。pages
:列出插件所有页面(包含向小程序开放的以及不向小程序开放的页面)。main
:插件面向第三方小程序的 js 接口。
注意
mp-weixin
中的pages
项与mp-alipay
中的publicPages
项作用一致mp-alipay
中供外部使用的页面,需要在pages
中声明,数组类型- 由于两端的格式不一致,可以在
plugin.json
中使用条件编译处理
编译步骤
- 安装 cli 最新的 alpha 版或最新的稳定版。截止文章发布时最新版本为:
2.0.0-alpha-32120210809004
。 - 执行命令行:
yarn dev:mp-weixin -- --plugin test-plugin
。 - 其中
test-plugin
为打出插件包的名字。项目根目录\dist\dev\mp-weixin\test-plugin
中既是可执行小程序插件代码。 mp-alipay
平台插件编译后续发布,请留意更新日志。
如何在项目中使用插件
- 宿主小程序是
uniapp项目
,在manifest.json
中配置相关信息即可,详情 - 宿主为原生小程序,在项目的
app.json
中配置即可:
在插件中使用条件编译
有时候项目不仅要编译到插件,也需要作为一个正常的小程序运行,但有些 api 并不适用于两端,此时可以使用自定义条件编译区分开来。
-
自定义条件编译(详情),在
package.json
中添加如以下配置:"uni-app": { "scripts": { "mp-wx-plugin": { "title": "微信小程序插件", "env": { "UNI_PLATFORM": "mp-weixin" }, "define": { "MP-WX-PLUGIN": true } }, "mp-ali-plugin": { "title": "阿里小程序插件", "env": { "UNI_PLATFORM": "mp-alipay" }, "define": { "MP-ALI-PLUGIN": true } }, } }
-
使用条件编译:
// #ifdef MP-WX-PLUGIN /** * CODE */ // #endif
-
编译时执行命令:
yarn dev:custom mp-wx-plugin --plugin test-plugin
即可,可将脚本写入script
中,每次执行更加简化。{ "dev:mp-wx-plugin": "yarn dev:custom mp-wx-plugin --plugin", "dev:mp-ali-plugin": "yarn dev:custom mp-ali-plugin --plugin" }
注意
- 组件在插件内部未使用,需要在宿主小程序中使用时,要在 main.js 中引入使用一下,否则编译后会丢失未使用插件。例如:
import helloList from '.../helloList'; Vue.component('hello-list', helloList);
- 插件中所编写的页面需要在
pages.json
中填写。 - 如果有多个
uniapp
编译的插件
需要运行在同一个小程序中,不要重名。 - 名称不要有特殊字符,比如
\
。会用到这个名字来挂载一个方法。 -
已经手动替换为_
,其他的特殊字符不要写。- 各家小程序插件对各
api
的支持情况不同,具体请查看小程序官方文档的相关描述
2021-11-04 更新
- 修复 mp-weixin 插件模式,不触发
$emit
。下载 附件 ,替换至node_modules\@dcloudio\uni-mp-weixin\dist\index.js
后重新编译插件代码。
附件为添加小程序导出到插件功能(另外两个为vue2、vue3示例):
小程序插件开发
平台差异说明
微信小程序 | 支付宝小程序 | 百度小程序 | 字节跳动小程序 | QQ 小程序 | 快手小程序 |
---|---|---|---|---|---|
√ | √ | x | x | x | x |
注意
- 开发
微信小程序插件
时,基础库版本1.9.6
开始支持。(如果插件包含页面,则需要基础库版本2.1.0
。) - 开发
支付宝小程序插件
时,IDE 版本要求在 0.60 及以上
插件目录结构
plugin
├── components // 插件提供的自定义组件(可以有多个)
│ ├── hello-component.js
│ ├── hello-component.json
│ ├── hello-component.wxml
│ └── hello-component.wxss
├── pages
│ ├── hello-page.js // 插件提供的页面(可以有多个)
│ ├── hello-page.json
│ ├── hello-page.wxml
│ └── hello-page.wxss
├── index.js // 插件的 js 接口
└── plugin.json // 插件配置文件
插件配置文件
向第三方小程序开放的所有组件、页面和 js 接口都必须在 plugin.json 中声明
-
mp-weixin
{ "publicComponents": { "hello-component": "components/hello-component" }, "pages": { "hello-page": "pages/hello-page" }, "main": "index.js" }
每个配置的含义如下:
publicComponents
:列出所有向小程序开放的自定义组件。pages
:列出所有向小程序开放的页面。main
:插件面向第三方小程序的 js 接口。
-
mp-alipay
{ "publicComponents": { "hello-component": "components/hello-component" }, "publicPages": { "hello-pages": "pages/hello-page" }, "pages": [ "pages/hello-page" "pages/index" ], "main": "index.js" }
每个配置的含义如下:
publicComponents
:列出所有向小程序开放的自定义组件。publicPages
:列出所有向小程序开放的页面。pages
:列出插件所有页面(包含向小程序开放的以及不向小程序开放的页面)。main
:插件面向第三方小程序的 js 接口。
注意
mp-weixin
中的pages
项与mp-alipay
中的publicPages
项作用一致mp-alipay
中供外部使用的页面,需要在pages
中声明,数组类型- 由于两端的格式不一致,可以在
plugin.json
中使用条件编译处理
编译步骤
- 安装 cli 最新的 alpha 版或最新的稳定版。截止文章发布时最新版本为:
2.0.0-alpha-32120210809004
。 - 执行命令行:
yarn dev:mp-weixin -- --plugin test-plugin
。 - 其中
test-plugin
为打出插件包的名字。项目根目录\dist\dev\mp-weixin\test-plugin
中既是可执行小程序插件代码。 mp-alipay
平台插件编译后续发布,请留意更新日志。
如何在项目中使用插件
- 宿主小程序是
uniapp项目
,在manifest.json
中配置相关信息即可,详情 - 宿主为原生小程序,在项目的
app.json
中配置即可:
在插件中使用条件编译
有时候项目不仅要编译到插件,也需要作为一个正常的小程序运行,但有些 api 并不适用于两端,此时可以使用自定义条件编译区分开来。
-
自定义条件编译(详情),在
package.json
中添加如以下配置:"uni-app": { "scripts": { "mp-wx-plugin": { "title": "微信小程序插件", "env": { "UNI_PLATFORM": "mp-weixin" }, "define": { "MP-WX-PLUGIN": true } }, "mp-ali-plugin": { "title": "阿里小程序插件", "env": { "UNI_PLATFORM": "mp-alipay" }, "define": { "MP-ALI-PLUGIN": true } }, } }
-
使用条件编译:
// #ifdef MP-WX-PLUGIN /** * CODE */ // #endif
-
编译时执行命令:
yarn dev:custom mp-wx-plugin --plugin test-plugin
即可,可将脚本写入script
中,每次执行更加简化。{ "dev:mp-wx-plugin": "yarn dev:custom mp-wx-plugin --plugin", "dev:mp-ali-plugin": "yarn dev:custom mp-ali-plugin --plugin" }
注意
- 组件在插件内部未使用,需要在宿主小程序中使用时,要在 main.js 中引入使用一下,否则编译后会丢失未使用插件。例如:
import helloList from '.../helloList'; Vue.component('hello-list', helloList);
- 插件中所编写的页面需要在
pages.json
中填写。 - 如果有多个
uniapp
编译的插件
需要运行在同一个小程序中,不要重名。 - 名称不要有特殊字符,比如
\
。会用到这个名字来挂载一个方法。 -
已经手动替换为_
,其他的特殊字符不要写。- 各家小程序插件对各
api
的支持情况不同,具体请查看小程序官方文档的相关描述
2021-11-04 更新
- 修复 mp-weixin 插件模式,不触发
$emit
。下载 附件 ,替换至node_modules\@dcloudio\uni-mp-weixin\dist\index.js
后重新编译插件代码。
附件为添加小程序导出到插件功能(另外两个为vue2、vue3示例):
收起阅读 »
因疫情无法买到回国机票,17岁少年攻击航空公司系统获刑四年
受疫情影响,一些国际航线机票紧缺,有的航线花高价也是一票难求,官网订票、APP购票、找黄牛抢票,能想到的方法都用了,可还是买不到票,怎么办?
因为买不到回国机票,一气之下,身处境外的17岁少年小陈竟多次、持续攻击某航空公司计算机系统,致使该航空公司对外服务网络全面瘫痪近四小时,5000余万用户受到影响!
记者今日从广州白云法院了解到,小陈因犯破坏计算机信息系统罪,被判处有期徒刑4年。
买不到回国机票,他找黑客攻击航空公司系统
2020年6月初,17岁的小陈因疫情影响被强制留滞在国外疫情重区,因在境外无法买到回国机票而产生不满情绪。冲动之下,他在境外网站购买攻击套餐,利用DDOS(黑客通过远程控制服务器或计算机等资源,对目标发动高频服务请求,使目标服务器因来不及处理海量请求而瘫痪)等攻击手段,多次、持续攻击某航空公司客票等计算机系统。
此次黑客入侵,造成某航空公司对外服务网络全部瘫痪,包括客票业务、微信直播平台销售、机场旅客服务、飞行、运控等系统无法正常运作,导致为5000余万用户提供服务的客票等计算机系统不能正常运行累计四小时,给该航空公司造成巨大经济损失与负面网络舆论评价。

同年7月,归国的小陈在广州一酒店办理解除隔离手续时,被公安机关抓获。
落网后,小陈声称,当时人在国外,疫情非常严重,自己年纪小又发烧,害怕被感染。加之女朋友怀孕,压力较大,因此特别想回国。在购买机票失败后,情绪低落,心情焦虑,一时冲动,才充值购买境外网站攻击套餐,没有想到后果。对于自己的行为,他感到非常后悔!如果能与航空公司达成和解,愿意继续赔偿。
法院经审理认为,小陈无视国家法律,违反国家规定,对计算机信息系统功能进行干扰,造成计算机信息系统不能正常运行,后果特别严重,其行为已构成破坏计算机信息系统罪。
量刑上,鉴于小陈犯罪时已满十六周岁不满十八周岁,依法应当减轻或者从轻处罚。综合考虑小陈犯罪行为的性质、情节、危害后果及认罪态度,判决小陈犯破坏计算机信息系统罪,判处有期徒刑四年;缴获的作案工具笔记本电脑一台予以没收。
法官说法:受疫情影响不是违法犯罪借口
2020年至今,境内外疫情持续蔓延,国内外航空限行政策与疫情防控要求各不相同,且不断变化调整。经办法官指出,纵归国心切、纵“一票难求”,也应通过正常途径购买机票,购买不到机票时,应通过寻求使领馆帮助等法律途径解决问题,而非剑走偏锋,在危险的边缘试探。否则稍有不慎,便可能是违法犯罪、贻误终身、自食恶果。
本案中,根据小陈的供述,其上完小学三年级后便辍学打工,自15岁起自学数字货币开发、大数据、区块链技术、人工智能,本是一名努力上进的青少年,由于出国后受疫情影响滞留国外,归国心切的他冲动之下实施违法行为。考虑到小陈实施犯罪时未成年,案发时情境特殊,其主观恶性较小,犯罪后也能够如实供述自己的罪行,结合未成年人对犯罪的认知能力,实施犯罪行为的动机和目的、年龄、是否是初犯、偶犯、悔罪表现、个人成长的一贯情况等方面,予以从宽处罚。
法庭上,小陈虽有悔罪态度,怪自己年幼无知。但是,受疫情影响不是违法犯罪的借口,每个人都要对自己的行为承担相应的后果。
【转自公众号:广州日报 】,声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 邮箱地址:pufa@dcloud.io 。
受疫情影响,一些国际航线机票紧缺,有的航线花高价也是一票难求,官网订票、APP购票、找黄牛抢票,能想到的方法都用了,可还是买不到票,怎么办?
因为买不到回国机票,一气之下,身处境外的17岁少年小陈竟多次、持续攻击某航空公司计算机系统,致使该航空公司对外服务网络全面瘫痪近四小时,5000余万用户受到影响!
记者今日从广州白云法院了解到,小陈因犯破坏计算机信息系统罪,被判处有期徒刑4年。
买不到回国机票,他找黑客攻击航空公司系统
2020年6月初,17岁的小陈因疫情影响被强制留滞在国外疫情重区,因在境外无法买到回国机票而产生不满情绪。冲动之下,他在境外网站购买攻击套餐,利用DDOS(黑客通过远程控制服务器或计算机等资源,对目标发动高频服务请求,使目标服务器因来不及处理海量请求而瘫痪)等攻击手段,多次、持续攻击某航空公司客票等计算机系统。
此次黑客入侵,造成某航空公司对外服务网络全部瘫痪,包括客票业务、微信直播平台销售、机场旅客服务、飞行、运控等系统无法正常运作,导致为5000余万用户提供服务的客票等计算机系统不能正常运行累计四小时,给该航空公司造成巨大经济损失与负面网络舆论评价。
同年7月,归国的小陈在广州一酒店办理解除隔离手续时,被公安机关抓获。
落网后,小陈声称,当时人在国外,疫情非常严重,自己年纪小又发烧,害怕被感染。加之女朋友怀孕,压力较大,因此特别想回国。在购买机票失败后,情绪低落,心情焦虑,一时冲动,才充值购买境外网站攻击套餐,没有想到后果。对于自己的行为,他感到非常后悔!如果能与航空公司达成和解,愿意继续赔偿。
法院经审理认为,小陈无视国家法律,违反国家规定,对计算机信息系统功能进行干扰,造成计算机信息系统不能正常运行,后果特别严重,其行为已构成破坏计算机信息系统罪。
量刑上,鉴于小陈犯罪时已满十六周岁不满十八周岁,依法应当减轻或者从轻处罚。综合考虑小陈犯罪行为的性质、情节、危害后果及认罪态度,判决小陈犯破坏计算机信息系统罪,判处有期徒刑四年;缴获的作案工具笔记本电脑一台予以没收。
法官说法:受疫情影响不是违法犯罪借口
2020年至今,境内外疫情持续蔓延,国内外航空限行政策与疫情防控要求各不相同,且不断变化调整。经办法官指出,纵归国心切、纵“一票难求”,也应通过正常途径购买机票,购买不到机票时,应通过寻求使领馆帮助等法律途径解决问题,而非剑走偏锋,在危险的边缘试探。否则稍有不慎,便可能是违法犯罪、贻误终身、自食恶果。
本案中,根据小陈的供述,其上完小学三年级后便辍学打工,自15岁起自学数字货币开发、大数据、区块链技术、人工智能,本是一名努力上进的青少年,由于出国后受疫情影响滞留国外,归国心切的他冲动之下实施违法行为。考虑到小陈实施犯罪时未成年,案发时情境特殊,其主观恶性较小,犯罪后也能够如实供述自己的罪行,结合未成年人对犯罪的认知能力,实施犯罪行为的动机和目的、年龄、是否是初犯、偶犯、悔罪表现、个人成长的一贯情况等方面,予以从宽处罚。
法庭上,小陈虽有悔罪态度,怪自己年幼无知。但是,受疫情影响不是违法犯罪的借口,每个人都要对自己的行为承担相应的后果。
【转自公众号:广州日报 】,声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢。 邮箱地址:pufa@dcloud.io 。
https://new.qq.com/omn/20210817/20210817A066IQ00.html
收起阅读 »
个人/公司专业软件开发 Vx: Coder0s
公司成员精通Windows程序开发,网站开发,移动端APP开发,混合应用开发,PHP、JAVA、Go、Vue、React、Uniapp、React Native,公司精英团队开发,每日上传工作量,保证规定工期完成开发任务。
官网:https://www.newzhilai.com
主要技术架构
ThinkPHP+Uniapp、React Native
有需要联系微信Coder0s
案例: