Skyline渲染引擎
【问题描述】如下图所示,圆角边框渲染异常,出现线条不闭合的问题,线条没有平滑连接到圆弧上。 安卓真机: [图片] iOS真机: [图片] 【预期效果】如下图所示,线条闭合,平滑连接到圆弧上。 [图片] 【微信版本号】安卓 8.0.70、iOS 8.0.70 【基础库版本】3.15.1及以下 【必现 or 偶现】必现 【代码片段】https://developers.weixin.qq.com/s/ye4uD2mu8U8c
如题 skyline模式下 自定义路由弹窗页面包含scrollview的情况下 设置 associative-container="pop-gesture" 属性iOS手机无效,android 正常。可以直接用官网例子复现。 代码片段:https://developers.weixin.qq.com/s/BGoSE0mS7KQS 想迁移到skyline 太难了 ,
其中一个 是动态显示的(满足条件才会显示),一个是固定的。需要将固定显示的的root-portal 覆盖到动态显示的 root-portal 之上。 尝试使用 externalClass 样式指定z-index 以及起内部元素的 z-index 都无效
skyline 自定义路由模式下,如果在弹窗页中使用scrollview 如果按住scrollview来回拖动,会导致整个小程序直接奔溃卡死。直接使用官方提供的例子就可以复现。https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/skyline/preset-route.html 希望引起重视啊,因为这个问题导致我们没法切换到skyline了。 https://developers.weixin.qq.com/s/XC8BGymC7QMo https://developers.weixin.qq.com/s/BGoSE0mS7KQS [视频] 操作视频如上!
链接: https://pan.baidu.com/s/1hPSeyOEhHKeYowbQPl5rlg?pwd=kpss
skyline渲染模式半屏切换到全屏,shadow-root节点没有根据内容自适应高度,如何兼容?
问题描述: 场景:IM聊天场景中 skyline模式下的scroll-view 设置reverse反向滚动,如果内容高度小于scroll-view高度, 那么内容就会从最底部开始呈现。通常大部分用户的理解和习惯是聊天记录是从头部开始渲染。 这个反向滚动功能很好用,但是当内容很少不足一屏时,能否添加一个参数控制内容从最底部开始渲染 还是 从头部开始渲染? reverseInitPosition (top | bottom), 内容不足容器高度时,列表的渲染方向
绑定在手势系统上的dataset不能动态变化 复现步骤:1.长按文字触发手势后查看console输出,可以看到手势系统与bindtap的dataset里的qq均是'sss';2.点击红色框修改id,再次长按文字触发手势后查看console输出,可以看到手势系统的dataset还是原来的'sss',而bindtap的dataset里的qq是最新的'oooo' 请问有解决方案吗?急 代码片段 https://developers.weixin.qq.com/s/RPIiS0mE7wRx
背景:我司的排班功能是以门店+人+月的维度展示了一个排班面板,店长可在排班面板进行排班 性能瓶颈:由于数据量以及店员人数可能很多,我改成了虚拟列表,但是真机效果实在是不太行,滚动计算 + 数据传输导致体验卡顿 尝试修改为skyline渲染,性能提升很大,但是无法同时设置scroll-x scroll-y,让我非常难受,求官方解答 尝试使用嵌套scroll-view也没有解决,scroll-x下,子元素还会把所有列表渲染为一行(不知道是不是bug) 界面参考:左右是1-31号,上下是门店人员 [图片] 如果没有计划支持同时设置scroll-x scroll-y的话只能放弃了
首次进入 是正常显示 进入 一个详情页面再进入 另一个tabbar 页面 就不见了 目前测试阶 iphone16上出现这个情况; 但是在首次加载后tabbar页面切换到另一个tabbar页面也是正常的; 意思是只要tabbar 页面没有被加载过 从其他非 tabbar也跳转过来tabbar栏都不会显示。(奇怪的是我登录后跳转的第一个tabbar页面又是正常显示的) // import {svgplayer} from '../utils/svgaplayer' import config from '../config' var app = getApp() Component({ data: { tabShowStyle: '', tabBarShow: true, // 遮罩可见 maskVisible: false, isShow: false, selected: 0, color: "rgba(206, 206, 206, 1)", selectedColor: "rgba(255, 93, 102, 1)", list: [{ pagePath: "/pages/index/index", iconPath: config.fileURL + "new_xf/img/tabBar/home.png", selectedIconPath: config.fileURL + "new_xf/img/tabBar/home_active.png", text: "首页", textKey:'index', className: 'tab-bar-item', hidden: false // 是否隐藏该 tab }, { pagePath: "/pages/house/house", iconPath: config.fileURL + "new_xf/img/tabBar/house.png", selectedIconPath: config.fileURL + "new_xf/img/tabBar/house_active.png", text: "房源", className: 'tab-bar-item', info: 0, hidden: false, textKey: 'code1' // 用于标识使用哪个 globalData 变量更新文本 }, { pagePath: "/pages/car/car", iconPath: config.fileURL + "new_xf/img/tabBar/car.png", selectedIconPath: config.fileURL + "new_xf/img/tabBar/car_active.png", text: "车位", className: 'tab-bar-item', info: 0, hidden: false, textKey: 'code2' // 用于标识使用哪个 globalData 变量更新文本 }, { pagePath: "/pages/intention/intention", iconPath: config.fileURL + "new_xf/img/tabBar/yxd.png", selectedIconPath: config.fileURL + "new_xf/img/tabBar/yxd_active.png", text: "意向单", className: 'tab-bar-item', hidden: false }, ], loginShow: false, joinShow: false, baseImage: app.globalData.baseImage, // 添加图片预加载状态 imagesLoaded: false, tabData:{} }, lifetimes: { async attached() { }, }, properties: { update:{ type:Number, value:0 } }, observers:{ update: function (to) { this.updateTabTextFromGlobalData() } }, methods: { switchTab(e) { if(this.data.maskVisible) return const data = e.currentTarget.dataset let path = data.path let CATE = 0; // 如果是对车位的跳转就判断一下 if (path.includes('car')) { CATE = 2; path = app.observeCarType() } if (path.includes('house')) { CATE = 1; path = app.observeRoomType() } if(CATE !== 0) app.globalData.CATE = CATE; app.globalDialog.hide() //关闭全局弹窗 let pages = getCurrentPages(); let page = pages[pages.length - 1]; // 避免因为是房源和车位都是平面图导致切换另一个平面图时不刷新问题 if(page.data.pageId === "plane" && path === "/pages/plane/plane" && page.data.CATE !== CATE){ page.doRenovateCATE() }else{ wx.switchTab({ url: path }) } }, // 外部调用:显示全屏遮罩 showMask() { if (!this.data.maskVisible) { this.setData({ maskVisible: true }) } }, // 外部调用:隐藏全屏遮罩 hideMask() { if (this.data.maskVisible) { this.setData({ maskVisible: false }) } }, // 遮罩点击(可按需关闭) onMaskTap() { this.hideMask() }, // 从 globalData 更新 tab 文本(登录完成后调用) updateTabTextFromGlobalData() { const { code1, code2 ,settlementDocIds,projectInfo,tabData} = app.globalData const list = this.data.list.map(item => { const newItem = { ...item } // 如果设置了 textKey,则使用对应的 globalData 变量更新文本 if (item.textKey === 'code1') { newItem.text = code1 ? code1 : newItem.text newItem.hidden = !( projectInfo.cate_room == 1) } else if (item.textKey === 'code2') { newItem.text = code2 ? code2 : newItem.text newItem.hidden = !(projectInfo.cate_car == 1) } return newItem }) this.setData({ list,tabData }) }, } }) <!--miniprogram/custom-tab-bar/index.wxml--> <view class="tab-bar" style="{{tabShowStyle}}"> <!-- 全局遮罩(放在自定义 tabbar 组件内,确保在同一原生层可覆盖 tabbar) --> <!-- <cover-view wx:if="{{maskVisible}}" class="global-mask" catchtap="onMaskTap"></cover-view> --> <!-- <image src="{{baseImage}}/images/tabs/navBg.png" class="navBg"></image> --> <!-- 透明层,占位 --> <view class="zw_box"></view> <view class="tabbar_content"> <view wx:for="{{list}}" wx:key="index" wx:if="{{!item.hidden}}" class="tab-bar-item {{item.className + index}}" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab"> <!-- 使用两个图片元素,通过opacity控制显示,避免重复加载 --> <image src="{{item.iconPath}}" class="cover_image {{selected === index ? 'hide' : 'show'}}" mode="aspectFit" ></image> <image src="{{item.selectedIconPath}}" class="select_cover_img {{selected === index ? 'show' : 'hide'}}" mode="aspectFit" ></image> <view wx:if="{{selected !== index}}" style="color: {{selected === index ? selectedColor : color}}" class="cover_view">{{item.text}}</view> </view> </view> </view>
[图片] 用的微信官方知识库示例demo,不仅没有效果文字还显示乱码,预期是能正常实现文字颜色渐变效果 调试基础库:3.14.0 微信开发者工具版本:Nightly 2.01.2601162 代码段: https://developers.weixin.qq.com/s/XVLFzjmE8O6u
使用skyline引擎后tab底部区域,第一次进入小程序会显示黑色,第二次及之后都是正常的,我也怀疑第一次进入胶囊高度计算不对,但是修改了还是不行。我app.wxss强制给背景变白都不行。各种方法都试了,Ai工具试了也解决不了直接建议我使用自定义tab。求官方技术大佬支持 [图片] ,[图片] ,[图片]
[图片] 微信小程序基础库版本 3.13.0 微信开发者工具 RC 2.01.2510241 1、Skyline在开发工具中自动加载image标签中的图片会出现在XHR中,而不是img类型分类。 预期 图片加载应该正常出现在Img分类中 2、不同image标签加载同一个图片URL会出现重复请求加载,和webview表现不一致,应该是没有做资源共享 预期 同个页面中同一个URL的图片应该只需要请求加载一次
我微信基础库版本 3.13.0 微信开发者工具版本是 RC 2.01.2510241 snapshot组件截图中如果超过一定长度以后就会直接从头开始重复循环拼接截图,没有按照实际DOM进行渲染截图。代码段中已经复现这个问题 <snapshot id="target"> <view wx:for="{{imgs}}" wx:for-item="item" wx:for-index="index"> <image src="https://vod.hnedutv.com/218/2025/10/28/0699b52da18df9da042ebc715cf0be52080fc27c1761611505733.png?imageMogr2/auto-orient/thumbnail/5000000@/size-limit/$(fsize)!/ignore-error/1&pid=53123100" mode="aspectFit" /> <view style="width: 100%;height: 150rpx;background-color: brown;">测试 测试 {{index}}</view> </view> </snapshot> 我这边设备看到的情况是index到13以后就开始循环从0拼接图片了,预期应该是继续显示 14、 15、16…… 推测问题原因是snapshot API 会基于这个渲染结果生成 Canvas 形式的图片;当页面 高度非常大 超过底层渲染 buffer、Canvas 的最大纹理大小时,会触发 分段渲染或内存复用机制;底层为了优化和循环利用渲染 buffer,会把头部内容在内部 buffer 末尾复用。大概限制通常为宽度 8192px 或高度 16384px。具体高度我还没有验证。 [图片] 复现代码段: https://developers.weixin.qq.com/s/aP3wZ0mR8T66
Android 不行,iOS 可以。请 Android 同学修复一下。 问题概述标题:开发者工具"不校验合法域名"设置对 Android WebSocket 连接不生效 严重程度:高(阻碍本地开发) 问题类型:功能缺陷 详细描述在微信开发者工具中,即使勾选了"本地设置 → 不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书"选项,WebSocket 连接仍然被域名校验机制拦截,导致连接失败。 复现步骤环境配置打开微信开发者工具进入"详情" → "本地设置"✅ 勾选"不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书"发起 WebSocket 连接 const socket = io('ws://192.168.31.145:8000', { path: '/socket.io/', transports: ['websocket'] }); 观察结果连接短暂成功(收到 connect 事件)立即断开(收到 disconnect 事件)错误信息:{errMsg: "fail:url not in domain list"} 预期行为勾选"不校验合法域名"后: ✅ 允许连接到局域网 IP 地址(如 192.168.x.x)✅ 允许使用 ws://(非加密)协议✅ 连接应保持稳定,不因域名校验而断开 实际行为勾选"不校验合法域名"后: ❌ WebSocket 连接仍被域名白名单机制拦截❌ 连接在握手成功后立即断开❌ 控制台报错:"fail:url not in domain list"❌ 与"不校验合法域名"的预期行为不符 前端日志(关键证据) [00:09:36 GMT+0800 (CST)] === 测试1: 使用新 SocketTask API === index.ts:219 [00:09:36 GMT+0800 (CST)] 开始连接... index.ts:219 [00:09:36 GMT+0800 (CST)] ✅ wx.connectSocket 调用成功 index.ts:219 [00:09:36 GMT+0800 (CST)] ✅ SocketTask.onOpen 触发 index.ts:219 [00:09:36 GMT+0800 (CST)] - header: {"Connection":"Upgrade","Sec-WebSocket-Accept":"DKfV+Nr1FXd88mM8q7nKRzQYQZ4=","Upgrade":"websocket","date":"Wed, 07 Jan 2026 16:09:36 GMT","server":"uvicorn"} index.ts:219 [00:09:36 GMT+0800 (CST)] 📤 发送消息: Hello from SocketTask! index.ts:219 [00:09:36 GMT+0800 (CST)] ✅ 消息发送成功 index.ts:219 [00:09:36 GMT+0800 (CST)] 📨 SocketTask.onMessage 收到消息: index.ts:219 [00:09:36 GMT+0800 (CST)] - data: 0{"sid":"A9lneJVLGxc_IPEwAAAO","upgrades":[],"pingTimeout":60000,"pingInterval":25000,"maxPayload":1000000} index.ts:219 [00:09:36 GMT+0800 (CST)] ❌ SocketTask.onError: {"errMsg":"fail:url not in domain list"} index.ts:219 [00:09:37 GMT+0800 (CST)] 🔌 SocketTask.onClose 触发 index.ts:219 [00:09:37 GMT+0800 (CST)] - code: 1006 index.ts:219 [00:09:37 GMT+0800 (CST)] - reason: index.ts:219 [00:09:45 GMT+0800 (CST)] === 测试2: 使用老 wx.onSocket* API === index.ts:219 [00:09:45 GMT+0800 (CST)] ⚠️ 不推荐使用,仅用于对比测试 WAServiceMainContext.js:1 MiniProgramError wx.offSocketOpen is not a function TypeError: wx.offSocketOpen is not a function at ComponentCaller.testOldAPI (https://usr/chunk_11.appservice.js:2:1473) at ComponentCaller.<anonymous> (https://lib/WAServiceMainContext.js:1:610114) at c.testOldAPI (https://lib/WAServiceMainContext.js:1:738985) at f (https://lib/WAServiceMainContext.js:1:496230) at p.call (https://lib/WAServiceMainContext.js:1:496124) at e.callListener (https://lib/WAServiceMainContext.js:1:546732) at https://lib/WAServiceMainContext.js:1:547924 at a (https://lib/WAServiceMainContext.js:1:547138) at o (https://lib/WAServiceMainContext.js:1:547419) at e.dispatch (https://lib/WAServiceMainContext.js:1:547772) errorReport @ WAServiceMainContext.js:1 thirdErrorReport @ WAServiceMainContext.js:1 (anonymous) @ WAServiceMainContext.js:1 (anonymous) @ WAServiceMainContext.js:1 f @ WAServiceMainContext.js:1 call @ WAServiceMainContext.js:1 O @ WAServiceMainContext.js:1 f @ WAServiceMainContext.js:1 call @ WAServiceMainContext.js:1 callListener @ WAServiceMainContext.js:1 (anonymous) @ WAServiceMainContext.js:1 a @ WAServiceMainContext.js:1 o @ WAServiceMainContext.js:1 dispatch @ WAServiceMainContext.js:1 f @ WARenderContext.js:1 dispatchEvent @ WARenderContext.js:1 triggerTouchEvent @ WARenderContext.js:1 (anonymous) @ WARenderContext.js:1 Ut @ WAServiceMainContext.js:1 handleTap @ WARenderContext.js:1 handleTrackEnd @ WARenderContext.js:1 dispatchTouchEvent @ WARenderContext.js:1 (anonymous) @ WARenderContext.js:1 (anonymous) @ WARenderContext.js:1 index.ts:219 [00:09:51 GMT+0800 (CST)] === 测试3: 最简连接(无操作)=== index.ts:219 [00:09:51 GMT+0800 (CST)] ✅ 连接调用成功 index.ts:219 [00:09:51 GMT+0800 (CST)] ❌ 连接错误: {"errMsg":"fail:url not in domain list"} index.ts:219 [00:11:16 GMT+0800 (CST)] 🔌 连接已关闭: code=1000, reason= 后端日志(证明连接确实成功) # Engine.IO 握手成功 68r8MqovBwyVwgasAAAA: Sending packet OPEN data {'sid': '68r8MqovBwyVwgasAAAA', ...} 68r8MqovBwyVwgasAAAA: Upgrade to websocket successful INFO: connection open # Socket.IO 连接建立 🔌🔌🔌 [CONNECT EVENT] Socket.IO 连接建立: w-TaGkuOTSARZ4TmAAAB [CONNECT EVENT] auth: None 结论:后端日志证明连接完全成功,问题出在前端小程序的域名校验机制。 环境信息[图片] 影响范围受影响的开发场景本地 WebSocket 调试:无法连接本地开发服务器局域网联调:无法通过局域网 IP 进行真机测试Socket.IO 开发:所有使用 Socket.IO 的实时通信功能影响的开发者使用 WebSocket 进行实时通信的小程序开发者需要在本地调试 Socket.IO 的开发团队需要局域网联调的多端开发团队 已尝试的解决方案方案结果说明勾选"不校验合法域名"❌ 无效问题依然存在 技术分析问题根源"不校验合法域名"选项的实现可能存在以下问题: HTTP/HTTPS 请求生效,WebSocket 不生效wx.request 正常使用局域网 IP ✅wx.connectSocket 仍被域名校验拦截 ❌ 期望修复短期修复确保"不校验合法域名"对 WebSocket 连接生效保持配置的一致性(HTTP 和 WebSocket 应使用相同的校验规则)
建议官方研发小组考虑下, 支持这个特性吧。 list-builder性能很好,毋庸置疑。 但是很多场景需要用到scroll-into-view定位到某个节点的位置, 没有这个功能真的太痛苦了。现在就是特别想用list-builder 但是最终无法定位到某节点而不敢用,比如聊天界面场景, 有几百条未读消息需要定位到第一条未读的消息位置。已经在列表中的数据其实可以考虑定位功能的。现在我们的产品就差把祖坟刨了
在一个页面中存在2个并列的scroll-view组件时候,第一个scroll-view x轴滚动里面是图片列表,第二个scroll-view里面是商品列表,如果第二个scroll-view中渲染的数量多的时候,第一个scroll-view滚动图片出现卡顿掉帧现象,scroll-view都设置了type=“list”
代码片段: https://developers.weixin.qq.com/s/GNYsoOmj8H4 微信基础库: 3.7.12 在渲染富文本的时候高度是正常, 但是内容缺失,如下图所示 [图片] 在使用 web-static 表现正常,如下图所示 [图片]
【问题描述】image 组件添加 fade-in 属性,安卓无渐显效果: [图片] ios有渐显效果,两端表现不一致。 [图片] 【微信版本号】安卓 8.0.65 【基础库版本】3.11.1 【必现 or 偶现】必现 【代码片段】https://developers.weixin.qq.com/s/GfVDjIm68s4o
【问题描述】文档中描述到可以给 ad-custom 设置 wxss 样式调整广告宽度。 [图片] 实际使用过程中,发现部分广告会出现溢出的问题,宽度未能自适应。 [图片] [图片] [图片] 同时,还发现广告中的文字被遮挡的问题。 [图片] 【代码片段】https://developers.weixin.qq.com/s/8jTwSHm3814v <!-- wxml --> <view class="adContainer"> <ad-custom unit-id="adunit-9084c70445bb229c" ad-intervals="60" bindload="adLoad" binderror="adError" bindclose="adClose"></ad-custom> </view> /* css */ .adContainer { margin: 20px; box-sizing: border-box; }
小程序示例
交互动画 tab