微信原生小程序开发‘常见’与不常见问题解决方案(一)

微信小程序订单管理

当小程序收到这个信息时,需要配置订单管理页面,否则超过要求时间未配置的,会限制小程序被搜索与交易功能

解决方案

点击登录微信公众平台,订单管理>订单信息录入>输入小程序订单页面路由地址

user-info/user-order/user-order?id=${商品订单号}

这里输入的path就是小程序对应的页面路径

自定义组件无法渲染canvas

这个是微信小程序自身问题,在自定义的组件中是无法渲染canvas的,不可以将canvas的功能封装成一个自定义组件来引入使用

解决方案

将canvas直接渲染到wxml文件当中

html 复制代码
      <canvas class="canvas_box" type="2d" id="{{canvasInfo.canvasID}}" style="width:{{canvasInfo.canvasWidth}}px; height:{{canvasInfo.canvasHeight}}px;position: {{isSaveStatus?'absolute':'relative'}};top: {{canvasTopPx}}px;left: {{canvasLeftPx}}px;" catch:touchstart="canvasStart" catch:touchend="canvasEnd" catch:touchmove="canvasMove" />

iconfont 引入不生效

拷贝新的iconfong文件到小程序当中,发现新的标签没有渲染出来,这是因为开发者工具使用了缓存当中的css|scss文件,所以无法及时生效

解决方案

可以关闭开发者工具,重新启动后生效

或者是清除所有的缓存后重新编译,但是推荐使用上面的重启大法。

安卓设备在指定的小程序版本库下,png图片变为jpg图片

developers.weixin.qq.com/community/d...

在这个版本的时候,使用小程序的获取图片API拿到的图片,png图片会转为jpg图片,这个是微信小程序自身的问题,

解决方案

这个版本有这个问题,需要使用第三方的服务,将图片格式进行转换。推荐使用阿里云的OSS去解决该问题。

添加编译模式,连续的字符串拼接错误

在小程序调试的过程中,经常会添加编译模式,调试指定的页面,但是会出现页面跳转参数错误的情况

wx.navigateTo 使用该API跳转页面时,如果拼接的参数当中有字符串,然后字符串当中是用 , 的,会被开发者工具修改格式

js 复制代码
wx.navigateTo({ url: `${path.path}?prodID=${prodID}&strID=${strID}&editID=${editID}&skuID=${skuID}&keys=${path.keys}&editStatus=0&editDataID=null&cutout=${cutout}&prod_code=${prod_code}&curNum=${curNum}`, });

修改后的格式 prodID=5693&strID=53044%2C53045%2C53046&editID=test&skuID=64068&keys=hotCard&editStatus=1&editDataID=6600096&prod_code=undefined&cutout=true&curNum=0

错误点

&strID=53044%2C53045%2C53046

这个时候,页面的onLoad中接收到的参数就是错误的

解决方案

手动修改启动参数,将 %2c 修改为 ,

修正后

prodID=5693&strID=53044,53045,53046&editID=test&skuID=64068&keys=hotCard&editStatus=1&editDataID=6600096&prod_code=undefined&cutout=true&curNum=0

&strID=53044,53045,53046

苹果(IOS)设备在小程序当中渲染image会导致闪退

IOS设备在自定义组件当中渲染image元素时,如果渲染的元素px超过一定值时,那么IOS设备会直接闪退

解决方案

限制image的宽高在3000px以内。在开发小程序的过程中,如果一张图片的高度特别高,不推荐使用image元素进行渲染,推荐使用rich-texty元素渲染。

developers.weixin.qq.com/miniprogram...

js 复制代码
    <rich-text nodes="{{newHtml}}" class="introduce-content"></rich-text>

安卓设备canvas渲染报错

安卓设备在canvas上面渲染图片时,如果图片的宽高超过8000px左右,那么图片请求会失败

报错

gsimg.gs-art.cn/canvasEditT...

不报错

gsimg.gs-art.cn/canvasEditT...

解决方案

将图片进行压缩,等比例减少图片的宽高。比如原图是300*8000的图片,那么可以等比例压缩为100*2666的图片,然后再进行渲染

background 链接不能用中文加空格

在元素的style样式中,如果使用background引入一张图片填充为元素的背景,这个使用这个图片的URL链接中不能包含 中文+空格,

例如下面这个链接

https://gsimg.gs-art.cn/canvasEditTools/PlayCards/54-86/扑克牌_画板 1 副本 7.png

html 复制代码
<view class="img_bg_render" style="background-image: url({{URL}});"> </view>

解决方案

图片命名时,将中文与空格移除,采用纯英文+数字的组合,推荐使用时间戳+6位随机英文的方式命名文件。

scroll-view 渲染的图片尺寸不能过大,不然苹果设备会闪退

在小程序当中使用scroll-view元素时,在其中渲染图片时,渲染的图片如果尺寸过大,那么苹果设备有一定的概率会闪退

sql 复制代码
<scroll-view class="colorful-background" style="width:80vw;height:{{templateRenderSize.height}}" scroll-x="true" wx:if="{{BorderArray.length>0}}"> 
    <view class="erz" style="width:{{templateRenderSize.width}};height:   {{templateRenderSize.height}}" wx:for="{{BorderArray}}" wx:key="index" catch:tap="onSwitch" data-index="{{index}}">
        <image webp="{{true}}" style="width: 100%; height: 100%; display: block; " lazy-load="{{true}}" src="{{item.thumb_url_edit}}" mode="" /> 
    </view> 
</scroll-view>

解决方案

将图片的宽高限制在合理范围,渲染使用rpx进行渲染,数值限制在1000以内

Ts文件引入Js文件报错

在开发的过程中,如果在ts文件中引入了js文件,这个时候开发者工具会报错,这个时候需要修改ts的配置文件

解决方案

找到项目的tsconfig.json文件,注释部分代码

js 复制代码
// "allowJs": true,
// "allowSyntheticDefaultImports": true,

tsconfig.json文件常用配置

json 复制代码
{
  "compilerOptions": {
    "strictNullChecks": true,
    "noImplicitAny": true,
    "module": "CommonJS",
    "target": "ES2020",
    // "allowJs": true,
    // "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "noImplicitThis": true,
    "noImplicitReturns": true,
    "alwaysStrict": true,
    "noFallthroughCasesInSwitch": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "strict": true,
    "strictPropertyInitialization": true,
    "lib": ["ES2020"],
    "typeRoots": [
      "./typings",
      "./type",
    ],
    "outDir": "./",
    "baseUrl": ".",
    "types": [""],
    "paths": {},
  },
  "include": [
    "./**/*.ts",
    "./**/*.js"
  ],
  "exclude": [
    "node_modules"
  ]
}

返回上一页时,携带参数

在开发的过程中,如果需要返回上一页,但是又需要将当前页面的参数返回到上一页当中,这个使用需要直接修改上一页的data中的数据

解决方案

setData当中修改的对象,可以在上一页当中提前创建好,

js 复制代码
// 返回上一页 并携带参数 
prevPage() {
let pages = getCurrentPages(); //获取当前页面js里面的pages里的所有信息。
let prevPage = pages[pages.length - 2]; //prevPage 是获取上一个页面的js里面的pages的所有信息。 -2 是上一个页面,-3是上上个页面以此类推。 
prevPage.setData({
// 将我们想要传递的参数在这里直接setData。上个页面就会执行这里的操作。 
testList: this.data.list
})
//上一个页面内执行setData操作,将我们想要的信息保存住。当我们返回去的时候,页面已经处理完毕。
//最后就是返回上一个页面。
wx.navigateBack({
delta: 1 
// 返回上一级页面。
})
//此时页面数据已经改变为我们传递过来的数据。如果想要返回之后处理这些数据,那么要在onShow函数里执行,因为我们执行的是返回,所以不会触发onLoad函数,所以我们要在onShow里执行我们想要使用的函数。 },

构建npm

构建npm时,如果出现报错,那么可以参考一下解决方案。

解决方案

blog.csdn.net/qq_43492356...

iconfont彩色字体

在使用iconfont的icon时,如果想要保持icon自身的彩色,那么需要进行如下步骤:

安装iconfont-tools (全局安装)

npm i -g iconfont-tools

在iconfont文件夹当中打开cmd窗口

输入 iconfont-tools

然后设置设置css文件的prefix: icons

引入

在app.wxs当中引入

js 复制代码
@import "/public/css/icon.wxss";

icon.wxss

css 复制代码
.iconfont { display: inline-block; width: 16px; height: 16px; background-repeat: no-repeat; background-position: center; background-size: 100%; } 

.icon-shangyizhang { background: url(data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3Csvg%20version%3D%221.1%22%20width%3D%27100%25%27%20height%3D%27100%25%27%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20id%3D%22icon-shangyizhang%22%20viewBox%3D%220%200%201024%201024%22%3E%3Cpath%20d%3D%22M512.682667%2054.613333C258.730667%2054.613333%2052.565333%20260.778667%2052.565333%20515.413333S258.730667%20976.213333%20513.365333%20976.213333s460.8-206.165333%20460.8-460.8C973.482667%20260.778667%20767.317333%2054.613333%20512.682667%2054.613333zM580.266667%20346.794667c0%207.509333-2.730667%2014.336-7.509334%2019.797333L415.061333%20500.394667c-2.730667%204.096-4.778667%209.557333-4.778666%2014.336%200.682667%204.096%202.048%208.874667%204.778666%2012.288l155.648%20141.312c10.24%208.874667%2010.922667%2023.893333%202.730667%2034.133333s-23.893333%2010.922667-34.133333%202.730667L383.658667%20563.2c-14.336-12.970667-22.528-32.085333-21.845334-51.2%200.682667-19.797333%209.557333-38.229333%2024.576-51.2l155.648-133.802667c9.557333-9.557333%2024.576-7.509333%2034.133334%202.730667%202.048%204.778667%203.413333%2010.922667%204.096%2017.066667z%22%20fill%3D%22%23FC6783%22%20%3E%3C%2Fpath%3E%3C%2Fsvg%3E); }
js 复制代码
icon 彩色图标生成与配置 
iconfont-tools 
例子:
C:\Users\EDY\Downloads\download\font_3768731_k4smw2bkq6>iconfont-tools 
? 设置输出文件夹名称: test 
? 设置输出文件css文件名称: test 
? 设置css文件的prefix: icons 
? 设置字体的大小: 16px 
? 是否生产小程序原生组件: true 
将test文件夹中的 test.css 样式文件内容全部复制 到 icons.wxss文件中 
将根目录文件夹中的iconfont.css 样式文件的内容全部复制到 icon.wxss文件中 

剪切板设置

设置剪切板

js 复制代码
wx.setClipboardData({ 
    data: 'data', 
    success (res) {
        wx.getClipboardData({
            success (res) {
                console.log(res.data) // data 
            }
        }) 
    } 
})

查看剪切板

wx.getClipboardData({ success (res){ console.log(res.data) } })

企业微信客服配置

wxml

html 复制代码
<text bindtap="onkefu" class="text"> 在线客服 (09:30-22:30) <text class="iconfont icon icons-CURSOR"></text> </text> 

js

js 复制代码
wx.openCustomerServiceChat({ 
extInfo: { url: 'https://work.weixin.qq.com/kfid/kfc5cf1daf0afc926e3' }, // 客服URL 
corpId: 'wwda23536b4xxxxxxxx',// 企业ID 
success(res) { console.log('对接成功'); } 
})

主包跳转分包

【有道云笔记】主包跳转分包 note.youdao.com/s/cxMZMEXM

自定义组件传值

【有道云笔记】组件参数传递 note.youdao.com/s/TMzUq8Uo

自定义组件使用iconfont

在自定义组件当中,如果需要使用iconfont,需要在自定义组件的配置项中声明使用

在小程序当中使用canvas

【有道云笔记】创建环境 note.youdao.com/s/YomCsWNF

小程序TS环境配置

【有道云笔记】ts环境配置 note.youdao.com/s/NwmpTRA8

引入Easy SASS

【有道云笔记】Easy SASS note.youdao.com/s/7jl3CsHS

分包超过2M

在小程序开发的过程中,如果上传代码时,提示分包太大,超过2M,这个时候就需要删减代码,但是像这种超过2M的,一般都是用uniapp编译过来的项目,就算你再怎么删代码,这个时候也作用不大

解决方案

将代码移植到微信小程序当中,改为原生开发,直接舍弃uniapp方案,然后需要发布到其他平台时,使用微信小程序的多端应用模式,根据我多年的开发经验,这是最好的方案。

完结

OK , 以上就是本人在开发小程序过程中遇到的问题以及对应的解决方案,如果各位看到这里,非常感谢大家的观看,希望各位多多点赞收藏,后续我会继续出更多文章供大家学习,各位在开发过程中有遇到什么样的问题,也可以及时联系我。

如果大家还遇到其他的问题,有其他的解决方案,欢迎联系作者或者在下方留言,作者每天都会登录掘金,收到以后及时反馈,谢谢大家,祝大家在开发的路上顺顺利利无灾无难

相关推荐
醉城夜风~13 分钟前
CSS元素显示模式(display)
前端·css
AI大模型-小华1 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子3 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅3 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni4 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学5 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端
赵庆明老师5 小时前
Vben精讲:21-详解web-antd:tsconfig.json
前端·json·vim
wc885 小时前
微软EDGE浏览器功能学习
前端·学习·edge
Csvn6 小时前
🎯 原生 `<dialog>` 元素:终于可以扔掉一半的自定义弹窗组件了?
前端