小程序页面来源追踪实战:从场景值解析到用户行为分析
1. 项目概述为什么需要追踪页面来源在小程序开发里尤其是涉及电商、内容分发或者需要精细化运营的场景搞清楚用户是从哪个“门”进来的几乎成了刚需。你想想看一个用户可能通过分享卡片、公众号菜单、搜索列表或者直接扫码进入你的小程序。如果你不知道他是从哪儿来的就像开了一家店却不知道顾客是看了传单、朋友推荐还是路过进来的后续的运营策略、用户行为分析乃至功能引导都会变得盲目。“获取当前进页面的来源”这个需求核心就是解决这个“盲点”。它不仅仅是调用一个API那么简单背后关联着小程序的启动流程、场景值scene的解读、以及如何在不同生命周期里妥善地保存和传递这个“来源”信息。最近在处理一个电商促销活动的小程序时我们就深刻体会到了这一点我们需要区分用户是从活动海报扫码进来的还是从商品分享链接进来的以便展示不同的欢迎语和优惠券。如果处理不好轻则用户体验割裂重则营销资源错配。本文将从一个一线开发者的视角彻底拆解在小程序中获取并管理页面来源的完整方案。我们会从最基础的APIwx.getLaunchOptionsSync()讲起但不止于此。我会带你深入理解各种启动场景的差异分享如何设计一个健壮的来源管理逻辑并解决那些官方文档里不会写的“坑”比如冷启动与热启动的参数丢失问题、页面栈复杂情况下的来源传递等。无论你是正在开发小程序商城还是需要实现类似“奥特曼投票入口”这样的活动页这篇文章都能给你一套可直接复用的实战代码和清晰思路。2. 核心原理与API深度解析2.1 启动选项wx.getLaunchOptionsSync()的里里外外这是获取小程序启动初始状态的基石。调用这个同步API会返回一个对象其中包含了小程序启动时的关键信息。很多开发者只关心queryURL参数和scene场景值但要想做好来源管理必须理解其全貌。const launchOptions wx.getLaunchOptionsSync(); console.log(启动参数:, launchOptions);一个典型的返回对象如下{ path: pages/index/index, // 启动页面路径 scene: 1001, // 场景值 query: {}, // 启动参数 shareTicket: , // 群分享相关票据 referrerInfo: { // 来源信息从另一个小程序或公众号打开时 appId: , extraData: {} }, forwardMaterials: [], // 转发素材信息特定场景 chatType: 0, // 客服消息场景下的聊天类型 apiCategory: default // API类别 }关键字段解读与来源判断逻辑path 与 query这是最直接的“页面级”来源。例如从分享卡片进入path可能是pages/goods/detailquery里则包含了goodsId12345。这告诉我们用户具体进入了哪个页面以及携带了什么参数。scene (场景值)这是判断“入口级”来源的金钥匙。微信为不同入口分配了固定的场景值。1001发现栏小程序主入口。1005顶部搜索框的搜索结果页。1007单人聊天会话中的小程序消息卡片。1008群聊会话中的小程序消息卡片。1011扫描二维码。1012长按图片识别二维码。1036公众号菜单。1047扫描小程序码。1089微信聊天主界面下拉“最近使用”栏基础库2.2.4开始支持。 你需要维护一个场景值映射表将数字代码转化为业务可读的“来源渠道”如“扫码”、“群分享”、“公众号菜单”等。referrerInfo当你的小程序是从另一个小程序通过wx.navigateToMiniProgram或公众号特定菜单跳转过来时这个对象会包含来源小程序的appId和传递过来的extraData。这是做小程序间跳转或公众号引流的关键标识。注意wx.getLaunchOptionsSync()获取的是本次小程序启动时的参数。如果用户已经打开了小程序然后切到后台再切回来热启动或者通过右上角胶囊菜单的“重新进入小程序”这些操作不会重新触发获取新的启动参数你拿到的仍然是第一次冷启动时的数据。这是第一个容易踩坑的地方。2.2 页面路由与onLoad生命周期页面来源的获取通常是在页面的onLoad生命周期函数中进行的。onLoad函数会接收一个options参数其中包含了打开当前页面路径中的query参数。// pages/goods/detail.js Page({ onLoad(options) { console.log(页面参数:, options); // 例如: { goodsId: 123, from: share } // 这里的 options 来自于当前页面的路径如 goods/detail?goodsId123fromshare } })这里存在一个关键认知点页面onLoad中的options和全局App.onLaunch或wx.getLaunchOptionsSync()返回的query可能不是一回事。App.onLaunch中的options代表小程序启动时首个页面的参数。页面onLoad中的options代表当前页面被打开时的参数。如果用户是从小程序首页 (index) 通过wx.navigateTo跳转到商品详情页 (goods/detail)那么goods/detail页面的onLoad中的options可能来自跳转时传递的参数而小程序启动时的来源信息比如是从扫码进来的则保存在全局的启动参数里。因此一个完整的来源系统需要全局启动来源和页面级来源两部分信息。2.3 场景值 (scene) 的映射与业务应用单纯拿到一个数字场景值如1011对业务没有意义。我们需要建立一个映射关系并将其存储起来供整个小程序使用。实操建议在app.js的onLaunch中统一处理并存储来源信息。// app.js App({ onLaunch(options) { // 1. 获取并解析启动参数 const { scene, query, referrerInfo } options; // 2. 将场景值转换为可读渠道 const channel this._mapSceneToChannel(scene); // 3. 整合来源对象 this.globalData.launchSource { entryChannel: channel, // 入口渠道如 scan, groupShare entryScene: scene, entryQuery: query, referrerInfo: referrerInfo, timestamp: Date.now() // 记录启动时间可用于判断时效 }; console.log(全局启动来源:, this.globalData.launchSource); }, _mapSceneToChannel(scene) { const sceneMap { 1001: mainEntry, 1005: search, 1007: singleChat, 1008: groupChat, 1011: scan, 1012: qrRecognize, 1036: officialAccountMenu, 1047: miniProgramCode, 1089: recentList // ... 其他需要关注的场景 }; return sceneMap[scene] || unknown; }, globalData: { launchSource: null } });这样在任何页面你都可以通过getApp().globalData.launchSource来获取用户最初是从哪里进入小程序的。3. 实战构建健壮的页面来源管理系统理解了基础API我们开始搭建一个能在复杂场景下可靠工作的系统。这个系统需要解决两个核心问题1. 准确记录“入口来源”2. 在页面跳转中传递“上级页面来源”。3.1 全局来源与页面来源的分离与融合设计思路全局来源 (Global Source)在App.onLaunch中捕获并固化代表用户的“第一入口”。整个小程序生命周期内不变除非手动清除。页面来源 (Page Source)在每次页面跳转wx.navigateTo,wx.redirectTo等时由开发者显式传递代表用户到达当前页面的“直接路径”。实现方案封装路由方法为了统一传递页面来源我们封装自己的导航方法。// utils/router.js const app getApp(); export const navigateTo function(url, pageSource {}) { // pageSource 可以包含 fromPage来自哪个页面、fromAction什么操作如clickBanner等 const pages getCurrentPages(); const currentPage pages[pages.length - 1]; const sourceInfo { fromPage: currentPage.route, // 当前页面路径 fromPageAlias: currentPage.data?.pageAlias || , // 页面业务别名 timestamp: Date.now(), ...pageSource // 合并自定义来源信息 }; // 将来源信息序列化作为参数传递 const separator url.includes(?) ? : ?; const sourceParam _pageSource${encodeURIComponent(JSON.stringify(sourceInfo))}; const finalUrl ${url}${separator}${sourceParam}; wx.navigateTo({ url: finalUrl }); }; // 类似地可以封装 redirectTo, switchTab 等在页面中接收并处理// pages/goods/detail.js Page({ onLoad(options) { // 解析页面来源参数 let pageSource {}; if (options._pageSource) { try { pageSource JSON.parse(decodeURIComponent(options._pageSource)); } catch (e) { console.error(解析页面来源参数失败, e); } } // 获取全局入口来源 const globalSource getApp().globalData.launchSource; // 综合判断当前页面的完整上下文来源 this.setData({ // 页面直接来源如从首页的Banner点击过来 directSource: pageSource, // 用户最初入口如从群分享扫码进来 entrySource: globalSource, // 当前的商品ID等业务参数 goodsId: options.goodsId }); // 根据不同的来源组合执行不同的业务逻辑 this._handleDifferentSource(pageSource, globalSource); }, _handleDifferentSource(pageSource, globalSource) { // 示例如果用户是从群分享进来的且当前页面是从首页跳转过来的可以展示群专享提示 if (globalSource.entryChannel groupChat) { wx.showToast({ title: 欢迎来自群聊的小伙伴, icon: none }); } // 示例如果是从搜索列表页点击进来的可以上报搜索转化事件 if (pageSource.fromPage pages/search/list) { this._reportSearchConversion(); } } });3.2 处理冷启动、热启动与“重新进入小程序”这是来源管理中最棘手的部分之一。冷启动小程序首次打开或销毁后再次打开。App.onLaunch会被调用能正确获取启动参数。热启动小程序打开后被切到后台例如按了手机Home键再切回前台。此时App.onShow会被调用但onLaunch不会。App.onShow的参数options中同样包含scene,query,path等信息但它返回的是上次冷启动时的参数而不是用户从后台切回时的场景。“重新进入小程序”用户点击右上角胶囊菜单的“重新进入小程序”。这相当于一次新的冷启动会触发App.onLaunch并且其options中的path通常是小程序的主页如pages/index/index而query可能为空这会导致你之前通过分享携带的参数丢失。解决方案持久化存储关键来源信息。我们不能仅仅依赖内存中的globalData因为热启动或“重新进入”可能导致逻辑混乱。我们需要将关键的、需要跨次启动维持的来源信息如分享带来的邀请码、活动ID存入本地缓存。// app.js App({ onLaunch(options) { this._initLaunchSource(options); }, onShow(options) { // 热启动时可以对比当前options和存储的来源判断是否发生了“重新进入” this._checkSourceChange(options); }, _initLaunchSource(options) { const { scene, query, path } options; const channel this._mapSceneToChannel(scene); const newSource { entryChannel: channel, entryScene: scene, entryQuery: query, entryPath: path, launchTimestamp: Date.now() }; // 从缓存中读取上一次的来源 const oldSource wx.getStorageSync(lastLaunchSource); // 关键逻辑判断是否为一次全新的、有意义的启动例如新的分享卡片、新的扫码 // 简单的策略如果路径或关键查询参数不同则认为是新来源 if (!oldSource || oldSource.entryPath ! path || this._isQuerySignificantlyDifferent(oldSource.entryQuery, query)) { // 是新来源更新全局数据和缓存 this.globalData.launchSource newSource; wx.setStorageSync(lastLaunchSource, newSource); // 可以在这里触发新来源的埋点或业务逻辑 this._onNewSourceDetected(newSource); } else { // 是热启动或无关紧要的变化沿用旧的来源 this.globalData.launchSource oldSource; } }, _isQuerySignificantlyDifferent(oldQuery, newQuery) { // 定义哪些参数的变化意味着全新来源例如 shareTicket, inviteCode, activityId const significantKeys [shareTicket, inviteCode, activityId]; return significantKeys.some(key oldQuery[key] ! newQuery[key]); }, _onNewSourceDetected(source) { // 处理新来源例如上报分析事件 console.log(检测到新启动来源:, source); // wx.request(...) 上报日志 } });3.3 在复杂页面栈中的来源传递当页面栈较深时例如 A - B - CC页面可能需要知道它来自B但最终源头是A。我们的封装路由方法已经传递了直接上级来源。如果需要完整的路径链可以在跳转时将历史来源也传递下去但这会增加参数复杂度。一个更常见的做法是在关键页面如订单提交页、支付成功页不仅记录直接来源还去读取全局的入口来源这样就能知道“用户从哪来最终到了哪”足以满足大部分漏斗分析和归因需求。4. 高级应用与性能埋点结合获取页面来源的终极目的是为了业务分析。将来源系统与自定义事件埋点结合能产生巨大价值。4.1 定义带来源维度的事件在你的埋点系统中每个事件上报时都自动附加上下文来源。// utils/analytics.js import { getCurrentPageSource } from ./sourceUtils; // 一个封装好的获取当前页面综合来源的方法 export function trackEvent(eventName, eventParams {}) { const app getApp(); const pageSource getCurrentPageSource(); // 包含直接来源和入口来源 const userInfo app.globalData.userInfo; // 用户信息 const finalParams { ...eventParams, _source: { // 统一的前缀方便日志解析 entry_channel: pageSource.entryChannel, entry_scene: pageSource.entryScene, direct_from: pageSource.directFrom, current_path: getCurrentPages().slice(-1)[0]?.route }, _user: userInfo, _timestamp: Date.now() }; // 上报到你的服务器或数据分析平台 wx.request({ url: https://your-analytics-endpoint.com/track, method: POST, data: finalParams, header: { Content-Type: application/json } }); }4.2 监控页面停留时长与来源关联结合来源信息可以更精细地分析不同渠道用户的页面行为。// 在页面的 onShow 和 onHide 中记录时间 Page({ data: { pageShowTime: 0 }, onShow() { this.setData({ pageShowTime: Date.now() }); // 上报页面进入事件携带来源 trackEvent(page_view, { page_name: this.route, source: this.data.directSource // 使用之前设置的数据 }); }, onHide() { const duration Date.now() - this.data.pageShowTime; // 上报页面离开事件携带停留时长和来源 trackEvent(page_leave, { page_name: this.route, duration: duration, source: this.data.directSource }); } });这样你就能分析出“从公众号菜单进入的用户在商品详情页平均停留多久”、“扫码进来的用户其支付转化率是否更高”这类深度业务问题。5. 常见问题、踩坑记录与排查技巧在实际开发中我遇到了不少坑这里总结一下希望能帮你省时间。5.1onLaunch与onShow中options的差异问题描述在onShow中获取到的options有时scene是undefined或与预期不符尤其是在Android机上。根因分析根据微信官方文档和社区反馈onShow在某些特定场景特别是从聊天顶部快捷栏进入时返回的参数可能不完整。onLaunch的参数是最可靠的。解决方案始终以App.onLaunch中获取的参数作为入口来源的权威依据。如果需要在onShow中处理来源逻辑应该引用在onLaunch中已保存到全局变量或缓存中的数据。5.2 分享卡片场景下的shareTicket解密问题描述从群分享卡片进入小程序虽然能拿到shareTicket但不知道如何解密获取群ID无法做群排行等社交功能。解决方案shareTicket需要配合wx.getShareInfo()API 并在后端进行解密才能拿到openGId群标识。前端需要将shareTicket传给自己的服务器。// 在小程序端 wx.getShareInfo({ shareTicket: res.shareTicket, // 从 launchOptions 或 onShow options 中获取 success(decryptRes) { const { encryptedData, iv } decryptRes; // 将 encryptedData 和 iv 发送到你的服务器 wx.request({ url: your-server-api/decrypt-group-info, method: POST, data: { encryptedData, iv }, success(serverRes) { const openGId serverRes.data.openGId; // 存储或使用群ID } }); } });注意解密encryptedData必须在你自己的服务器上完成使用小程序的session_key和appSecret绝对不要在前端进行否则会泄露敏感密钥。5.3 页面参数被截断或丢失问题描述通过navigateTo传递过长的参数特别是对象序列化后可能导致URL超长部分参数丢失。解决方案精简参数只传递必要的ID或关键标识其他数据通过ID去服务端查询。使用全局数据管理对于复杂数据可以先将数据存入一个全局的临时存储对象如app.globalData.tempData或一个内存缓存Map跳转时只传递一个唯一的key在目标页面用这个key去取数据。利用小程序全局存储对于需要持久化或跨页面的复杂数据使用wx.setStorageSync和wx.getStorageSync但要注意及时清理避免存储膨胀。5.4 调试技巧实时查看来源信息在开发阶段为了方便调试可以在app.js的onLaunch和每个页面的onLoad中将获取到的来源信息打印出来甚至渲染到页面一个调试浮窗上仅开发环境。// 一个简单的调试组件 // components/debug-source/debug-source.js Component({ data: { show: false, sourceInfo: }, lifetimes: { attached() { // 非生产环境才显示 if (process.env.NODE_ENV ! production) { const app getApp(); const pages getCurrentPages(); const current pages[pages.length - 1]; const pageOptions current.options; const info { 全局入口来源: app.globalData.launchSource, 当前页面参数: pageOptions, 页面栈: pages.map(p p.route) }; this.setData({ show: true, sourceInfo: JSON.stringify(info, null, 2) }); } } } })把这个组件放到基础布局里开发时就能一目了然地看到所有来源信息极大提升调试效率。5.5 来源信息的安全与隐私考量来源信息中可能包含敏感数据如邀请码可关联到具体用户、分享者的ID等。避免在客户端日志中明文输出像shareTicket、encryptedData这类敏感信息在打console.log时要格外小心最好在发布前移除或做脱敏处理。服务端验证所有从前端上传的来源信息尤其是query参数在服务端都要进行严格的验证和过滤防止参数被篡改进行恶意操作例如篡改inviteCode来冒领奖励。遵守平台规范微信小程序对用户数据有严格规定确保你的来源追踪和用途符合《微信小程序平台服务条款》和隐私政策必要时应向用户提供说明并获取同意。构建一个健壮的小程序页面来源管理系统看似是细节实则是连接用户行为与业务逻辑的关键桥梁。它让“流量”变得可知、可析、可用。从基础的API调用到应对冷热启动的持久化策略再到与埋点系统的深度集成每一步都需要结合具体业务场景仔细考量。希望本文的拆解和实战经验能帮助你在下一个项目中游刃有余地处理好“用户从哪来”这个问题。

相关新闻

Photoshop新手入门:从安全安装到核心操作全解析

Photoshop新手入门:从安全安装到核心操作全解析

如果你是一名刚接触平面设计、图片处理或UI设计的新手,或者在工作中需要处理图片但不知从何下手,那么你很可能正面临一个经典困境:网上铺天盖地的“PS下载安装”教程,要么是夹杂着破解、激活码的灰色地带,要么是零散不…

2026/10/9 12:44:21 阅读更多 →
硬件和算法,到底哪个更有趣?

硬件和算法,到底哪个更有趣?

这个问题我想了很久,答案可能和你预期的不太一样——它们有趣的方式完全不同,而真正有意思的是搞清楚自己到底被哪种"有趣"吸引。硬件的有趣:你能摸到它硬件有一种算法永远给不了的质感——它是真实的。你焊好一块板子,…

2026/10/6 7:45:20 阅读更多 →
Hugging Face模型与数据集本地化下载实战指南

Hugging Face模型与数据集本地化下载实战指南

1. 项目概述:为什么我们需要本地化Hugging Face资源? 如果你正在接触或已经深入使用过Hugging Face,大概率已经体会过那种“又爱又恨”的感觉。爱的是,它几乎成了现代AI开发的“中央仓库”,从BERT、GPT到最新的开源大…

2026/10/4 13:24:01 阅读更多 →

最新新闻

人脸表情识别端到端实战:从OpenCV检测到TensorRT部署

人脸表情识别端到端实战:从OpenCV检测到TensorRT部署

简介:本资源是一份基于Python实现的人脸表情识别入门级开发实践包,面向计算机视觉初学者、后端开发人员及AI兴趣学习者,聚焦人脸68个关键点定位这一核心预处理环节,为后续表情分类与情感分析提供可靠特征基础。压缩包共2个文件&am…

2026/10/10 14:44:48 阅读更多 →
U-Net+PatchGAN图像修复实战:可落地的深度学习方案

U-Net+PatchGAN图像修复实战:可落地的深度学习方案

简介:本资源是一套基于深度学习的图像修复算法完整实现方案,面向计算机、人工智能、电子信息等专业的本科生毕设与课程设计需求,尤其适合正在开展毕业设计或项目实战练习的学习者。内容涵盖可直接运行的Python源码、配套数据集(Pl…

2026/10/10 14:44:48 阅读更多 →
PyTorch deeplabv3人像抠图实战:二分类分割与边缘优化

PyTorch deeplabv3人像抠图实战:二分类分割与边缘优化

简介:本资源面向计算机视觉初学者与语义分割实践者,围绕 PyTorch 自带 deeplabv3 实现人物抠图这一二分类语义分割任务展开,帮助读者掌握从模型调用到预测输出的完整流程。包内共 3453 个文件,以 3411 个 png 图像数据为主&#x…

2026/10/10 14:44:47 阅读更多 →
fsearch 索引越用越大?内存与磁盘占用排查瘦身实录

fsearch 索引越用越大?内存与磁盘占用排查瘦身实录

fsearch 索引越用越大?内存与磁盘占用排查瘦身实录 【免费下载链接】fsearch Whole-disk file search for macOS: fuzzy names, typo tolerance, indexed content grep. ~1 ms over 8M files. 项目地址: https://gitcode.com/gh_mirrors/fsea/fsearch 毫秒级…

2026/10/10 14:44:47 阅读更多 →
openjdk:8-jre镜像拉取失败原因与替代方案详解

openjdk:8-jre镜像拉取失败原因与替代方案详解

如果你最近在本地、CI 流水线或者测试环境里执行docker pull openjdk:8-jre,大概率不是手滑敲错命令,而是这条 tag 本身已经落伍了。我这两年在不同项目里反复见过三类报错:manifest for openjdk:8-jre not found、no matching manifest for …

2026/10/10 14:44:47 阅读更多 →
C# WinForms图书管理系统:远程操作与图片管理实战

C# WinForms图书管理系统:远程操作与图片管理实战

在做一个管理类的小系统时,很多人一开始都会陷入“功能堆砌”的误区——先把增删改查摆上去,再想界面怎么调,最后才发现数据表设计不合理、图片处理一团糟、更别提让其他人通过局域网访问数据库这种事了。这篇博文我想分享一个比较完整的C# W…

2026/10/10 14:43:45 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →