HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

uniapp扩展组件uni-file-picker有安全漏洞,用云效部署后,会泄漏源代码

安全漏洞

我是h5项目,用uni-file-picker进行文件选择上传,然后用云效部署,发现在这个页面的js文件里,有我自己的云效账号密码token等,继而能找到阿里云仓库源代码,太神奇了。

我写的代码如下,刚开始不知道是哪里泄漏的,反复验证后,发现是这段代码,哪怕只留下limit,也会泄漏:

uni-file-picker v-if="userinfo.id" class="file-picker" ref="filePickerRef" v-model="state.uploadFile"  
            limit="1" file-mediatype="all" :auto-upload="false" title="" :sourceType="['album']" @select="fileSelect" ></uni-file-picker>

部分泄漏内容如下:
Re({
npm_command: "run-script",
privileged: "false",
KUBERNETES_SERVICE_PORT_HTTPS:
STEP_DOCUMENT_JSON:
TASK_DIR:
npm_config_userconfig:
runnerCacheMode:
KUBERNETES_SERVICE_PORT:
npm_config_cache:
operator:
invalidStepVersion:
NVM_INC:
NVM_IOJS_ORG_MIRROR:
NODEGROUP_TYPE:
npm_config_electron_mirror:
HOSTNAME:
npm_config_always_auth: LANGUAGE:

继续阅读 »

我是h5项目,用uni-file-picker进行文件选择上传,然后用云效部署,发现在这个页面的js文件里,有我自己的云效账号密码token等,继而能找到阿里云仓库源代码,太神奇了。

我写的代码如下,刚开始不知道是哪里泄漏的,反复验证后,发现是这段代码,哪怕只留下limit,也会泄漏:

uni-file-picker v-if="userinfo.id" class="file-picker" ref="filePickerRef" v-model="state.uploadFile"  
            limit="1" file-mediatype="all" :auto-upload="false" title="" :sourceType="['album']" @select="fileSelect" ></uni-file-picker>

部分泄漏内容如下:
Re({
npm_command: "run-script",
privileged: "false",
KUBERNETES_SERVICE_PORT_HTTPS:
STEP_DOCUMENT_JSON:
TASK_DIR:
npm_config_userconfig:
runnerCacheMode:
KUBERNETES_SERVICE_PORT:
npm_config_cache:
operator:
invalidStepVersion:
NVM_INC:
NVM_IOJS_ORG_MIRROR:
NODEGROUP_TYPE:
npm_config_electron_mirror:
HOSTNAME:
npm_config_always_auth: LANGUAGE:

收起阅读 »

避坑:ios自定义启动图官方提供的storyboard 模板

iOS 启动图片

在storyboard 文件中包含了这么一段代码,我正常开发只是替换了外面的图片。快要上线了才发现启动图底部还有一行小字”hello uniapp“

                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="hello uniapp" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QBH-Ne-rcx">  
                                <rect key="frame" x="168" y="835" width="78.333333333333314" height="17"/>  
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>  
                                <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>  
                                <nil key="highlightedColor"/>  
                            </label>
继续阅读 »

在storyboard 文件中包含了这么一段代码,我正常开发只是替换了外面的图片。快要上线了才发现启动图底部还有一行小字”hello uniapp“

                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="hello uniapp" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QBH-Ne-rcx">  
                                <rect key="frame" x="168" y="835" width="78.333333333333314" height="17"/>  
                                <fontDescription key="fontDescription" type="system" pointSize="14"/>  
                                <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>  
                                <nil key="highlightedColor"/>  
                            </label>
收起阅读 »

高并发不卡顿!TP6+Uniapp三角洲代练护航小程序源码,支持三端同步,千万级订单这样架构。

高并发不卡顿,千万级订单从容承载!专为三角洲代练护航场景量身打造,基于TP6+Uniapp双框架开发,一站式解决代练平台高并发、多端适配、订单管理难题,源码可直接部署、灵活二开,助力快速搭建专业代练护航平台。
核心架构亮点拉满,直击代练行业痛点,兼顾性能与实用性,适配三角洲、和平精英、暗区突围等热门电竞游戏代练场景,无论是个人创业者、电竞工作室,还是代练平台运营者,都能快速落地业务、抢占市场先机。


后端采用TP6框架,基于PHP 7.3+构建,减少数据库压力,避免高峰期阻塞,筑牢高并发底座。前端Uniapp实现“一套代码三端运行”,无缝适配微信小程序、H5、Android/iOS App,三端数据实时同步,兼顾便捷性与体验感。

针对千万级订单场景,源码专项优化架构,采用分库分表、读写分离设计,搭配Redis分布式锁防重复操作,结合负载均衡与动态扩容,轻松承载订单峰值冲击。同时深度适配三角洲代练场景,内置双角色管理、订单全流程管控、支付结算、营销裂变等核心功能,无需额外开发,快速上线运营。


查看演示及源码获取地址⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

继续阅读 »

高并发不卡顿,千万级订单从容承载!专为三角洲代练护航场景量身打造,基于TP6+Uniapp双框架开发,一站式解决代练平台高并发、多端适配、订单管理难题,源码可直接部署、灵活二开,助力快速搭建专业代练护航平台。
核心架构亮点拉满,直击代练行业痛点,兼顾性能与实用性,适配三角洲、和平精英、暗区突围等热门电竞游戏代练场景,无论是个人创业者、电竞工作室,还是代练平台运营者,都能快速落地业务、抢占市场先机。


后端采用TP6框架,基于PHP 7.3+构建,减少数据库压力,避免高峰期阻塞,筑牢高并发底座。前端Uniapp实现“一套代码三端运行”,无缝适配微信小程序、H5、Android/iOS App,三端数据实时同步,兼顾便捷性与体验感。

针对千万级订单场景,源码专项优化架构,采用分库分表、读写分离设计,搭配Redis分布式锁防重复操作,结合负载均衡与动态扩容,轻松承载订单峰值冲击。同时深度适配三角洲代练场景,内置双角色管理、订单全流程管控、支付结算、营销裂变等核心功能,无需额外开发,快速上线运营。


查看演示及源码获取地址⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

收起阅读 »

IOS 高版本跳转不到设置,应该怎么弄?

使用plus.runtime.openURL("app-settings:")

使用plus.runtime.openURL("app-settings:")

付费定制一个视频播放器插件

插件需求

要支持安卓、ios、网页,支持直播模式和回放模式,直播模式下可以支持切换线路,直播模式没有进度条,样式有些变化,回放模式下支持倍速播放,能做的联系我,付费

要支持安卓、ios、网页,支持直播模式和回放模式,直播模式下可以支持切换线路,直播模式没有进度条,样式有些变化,回放模式下支持倍速播放,能做的联系我,付费

【免费解答一切uniapp问题】

Debug

互相促进吧,我解决你的问题,正好补全我的知识点的死角。

互相促进吧,我解决你的问题,正好补全我的知识点的死角。

使用nativejs监听USB设备插拔

Native.JS

1.配置权限

<uses-feature android:name="android.hardware.usb.host"/>  
<uses-permission android:name="android.permission.USB_PERMISSION"/>

2.注册广播

const main = plus.android.runtimeMainActivity()  
const IntentFilter = plus.android.importClass('android.content.IntentFilter')  

/ 创建广播过滤器  
const filter = new IntentFilter()  
// filter.addAction(action)  
filter.addAction('android.hardware.usb.action.USB_DEVICE_ATTACHED')  
filter.addAction('android.hardware.usb.action.USB_DEVICE_DETACHED')  

const receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  
    onReceive: function(context, intent) {  
        // console.log("USB广播触发了!!!")  
        // console.log("完整intent:", intent.toString())  
        const actionType = intent.toString().match(/act=([^\s]+)/)[1]  
        console.log(actionType)  
        if (actionType === 'android.hardware.usb.action.USB_DEVICE_ATTACHED') {  

        } else if (actionType === 'android.hardware.usb.action.USB_DEVICE_DETACHED') {  

        }  

    }  
})  

// 注册广播  
main.registerReceiver(receiver, filter)
继续阅读 »

1.配置权限

<uses-feature android:name="android.hardware.usb.host"/>  
<uses-permission android:name="android.permission.USB_PERMISSION"/>

2.注册广播

const main = plus.android.runtimeMainActivity()  
const IntentFilter = plus.android.importClass('android.content.IntentFilter')  

/ 创建广播过滤器  
const filter = new IntentFilter()  
// filter.addAction(action)  
filter.addAction('android.hardware.usb.action.USB_DEVICE_ATTACHED')  
filter.addAction('android.hardware.usb.action.USB_DEVICE_DETACHED')  

const receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {  
    onReceive: function(context, intent) {  
        // console.log("USB广播触发了!!!")  
        // console.log("完整intent:", intent.toString())  
        const actionType = intent.toString().match(/act=([^\s]+)/)[1]  
        console.log(actionType)  
        if (actionType === 'android.hardware.usb.action.USB_DEVICE_ATTACHED') {  

        } else if (actionType === 'android.hardware.usb.action.USB_DEVICE_DETACHED') {  

        }  

    }  
})  

// 注册广播  
main.registerReceiver(receiver, filter)
收起阅读 »

关于微信小程序自定义TabBar在uniapp中的使用

微信小程序 uniapp

在根项目(和main.js、pages.json等文件同级的地方)中创建微信小程序原生的 custom-tab-bar 文件,
可以微信小程序参考官方
https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html
这里要注意的是
this.getTabBar().setData({
selected: 0
})
这种写法是在微信小程序原生中用的(微信小程序原生的.js中使用),
在uniapp中,应该如下使用,否者每次跳转tab页,都是第一个被选中
// 更新自定义 TabBar 选中状态(.vue中使用)
if (typeof this.$mp.page.getTabBar === 'function') {
const tabBar = this.$mp.page.getTabBar();
if (tabBar) {
tabBar.setData({
selected: 0
});
}
}

继续阅读 »

在根项目(和main.js、pages.json等文件同级的地方)中创建微信小程序原生的 custom-tab-bar 文件,
可以微信小程序参考官方
https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html
这里要注意的是
this.getTabBar().setData({
selected: 0
})
这种写法是在微信小程序原生中用的(微信小程序原生的.js中使用),
在uniapp中,应该如下使用,否者每次跳转tab页,都是第一个被选中
// 更新自定义 TabBar 选中状态(.vue中使用)
if (typeof this.$mp.page.getTabBar === 'function') {
const tabBar = this.$mp.page.getTabBar();
if (tabBar) {
tabBar.setData({
selected: 0
});
}
}

收起阅读 »

跨境电商结算金额出现 0.0000000003?教你一招完美解决!

在做第一代跨境电商项目时,发现 270.6 + 49.99 居然不等于 320.59?这种浮点数精度 Bug 在结算时简直是灾难。
计算机无法精确表示某些十进制小数,导致累加后出现微小偏差。
轻量、无依赖、适配 Vue 3 和 Uni-app 移动端。

“为了方便大家快速复用,我已经把这套经过实战检验的逻辑封装成了 uni_modules 插件。

插件地址:https://ext.dcloud.net.cn/plugin?id=27469

欢迎大家下载支持,后续会持续更新更多跨境电商实战组件。”

继续阅读 »

在做第一代跨境电商项目时,发现 270.6 + 49.99 居然不等于 320.59?这种浮点数精度 Bug 在结算时简直是灾难。
计算机无法精确表示某些十进制小数,导致累加后出现微小偏差。
轻量、无依赖、适配 Vue 3 和 Uni-app 移动端。

“为了方便大家快速复用,我已经把这套经过实战检验的逻辑封装成了 uni_modules 插件。

插件地址:https://ext.dcloud.net.cn/plugin?id=27469

欢迎大家下载支持,后续会持续更新更多跨境电商实战组件。”

收起阅读 »

【关于】uniCloud阿里云服务空间云函数计费规则调整,节约资源费用经验分享。

unicloud入门教程 uniCloud

我也是等到费用不够提醒的时候,才注意到的。那个时候已经过去很多天了。附图

我小程序日活300左右吧,所以正常也没怎么去管理,让它自己跑。
我分了很多云对象。各司其职。新规出来后,我把定时任务在同一时间段的合并成一个。
全部云对象合并成一个。新的云对象有4000行代码。

在这里应该有人担心合并成一个后的性能问题。有区别,但是类似我这样的 区别应该不大。
启动阶段分为 冷启动 跟 热启动。(官方文档:阿里云:15分钟内没有第二次访问的云函数,就会被回收)
代码大了冷启动需要耗时比较久。
都是热启动状态下区别很小,忽略不计。

总结,冷启动比较久一点。热启动状态下无区别。
(PS:在改规前,我还想写定时任务,让函数一直处于热启动,这样前端请求返回就会跳过函数冷启动的阶段更快。)

所以这里的建议是合并成一个云对象,这一步适用很多中小项目。
因为我使用的是uni-id 所以我理论上最低消耗应该是 0.24x2+定时任务 也就是五毛到六毛。比之前高了10倍,但是可以接受。
使用于不是迁移到支付云的大家。

有不懂了,留言。我看见会帮忙。

继续阅读 »

我也是等到费用不够提醒的时候,才注意到的。那个时候已经过去很多天了。附图

我小程序日活300左右吧,所以正常也没怎么去管理,让它自己跑。
我分了很多云对象。各司其职。新规出来后,我把定时任务在同一时间段的合并成一个。
全部云对象合并成一个。新的云对象有4000行代码。

在这里应该有人担心合并成一个后的性能问题。有区别,但是类似我这样的 区别应该不大。
启动阶段分为 冷启动 跟 热启动。(官方文档:阿里云:15分钟内没有第二次访问的云函数,就会被回收)
代码大了冷启动需要耗时比较久。
都是热启动状态下区别很小,忽略不计。

总结,冷启动比较久一点。热启动状态下无区别。
(PS:在改规前,我还想写定时任务,让函数一直处于热启动,这样前端请求返回就会跳过函数冷启动的阶段更快。)

所以这里的建议是合并成一个云对象,这一步适用很多中小项目。
因为我使用的是uni-id 所以我理论上最低消耗应该是 0.24x2+定时任务 也就是五毛到六毛。比之前高了10倍,但是可以接受。
使用于不是迁移到支付云的大家。

有不懂了,留言。我看见会帮忙。

收起阅读 »

前后端分离!ThinkPHP 6 + UniApp 圈子小程序源码,代码优雅到没朋友

在圈子类小程序开发中,代码冗余、兼容性差、维护繁琐是常见痛点,而 ThinkPHP 6 + UniApp 组合的前后端分离架构,恰好破解这些难题,其源码的优雅度更是让开发者眼前一亮,兼顾高效开发与后期可扩展性。

后端采用 ThinkPHP 6 框架,遵循PSR规范,代码结构清晰、逻辑严谨,摒弃冗余代码,核心业务逻辑模块化拆分,接口开发简洁高效,支持灵活扩展,无论是圈子动态发布、评论互动,还是用户权限管理,都能快速落地。同时内置安全机制,有效防范SQL注入、XSS攻击,保障小程序稳定运行。

前端依托 UniApp 开发,实现一次编码、多端适配,无需重复开发即可同步生成微信小程序、支付宝小程序等多端版本,大幅降低开发成本。源码遵循前端规范,组件化开发思路贯穿全程,页面布局简洁美观,交互流畅,可直接复用组件快速搭建圈子核心功能。

这套源码最突出的优势的就是“优雅”——无冗余代码、注释清晰、逻辑连贯,新手可快速上手二次开发,老手能高效优化迭代。无需复杂配置,部署简单,无论是个人开发者搭建兴趣圈子,还是企业打造专属社群,这套前后端分离的圈子小程序源码,都是高效省心的优选。
查看演示及源码获取地址⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

继续阅读 »

在圈子类小程序开发中,代码冗余、兼容性差、维护繁琐是常见痛点,而 ThinkPHP 6 + UniApp 组合的前后端分离架构,恰好破解这些难题,其源码的优雅度更是让开发者眼前一亮,兼顾高效开发与后期可扩展性。

后端采用 ThinkPHP 6 框架,遵循PSR规范,代码结构清晰、逻辑严谨,摒弃冗余代码,核心业务逻辑模块化拆分,接口开发简洁高效,支持灵活扩展,无论是圈子动态发布、评论互动,还是用户权限管理,都能快速落地。同时内置安全机制,有效防范SQL注入、XSS攻击,保障小程序稳定运行。

前端依托 UniApp 开发,实现一次编码、多端适配,无需重复开发即可同步生成微信小程序、支付宝小程序等多端版本,大幅降低开发成本。源码遵循前端规范,组件化开发思路贯穿全程,页面布局简洁美观,交互流畅,可直接复用组件快速搭建圈子核心功能。

这套源码最突出的优势的就是“优雅”——无冗余代码、注释清晰、逻辑连贯,新手可快速上手二次开发,老手能高效优化迭代。无需复杂配置,部署简单,无论是个人开发者搭建兴趣圈子,还是企业打造专属社群,这套前后端分离的圈子小程序源码,都是高效省心的优选。
查看演示及源码获取地址⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

收起阅读 »