PlotJuggler 4 WebAssembly 部署实战:从多线程构建到跨源隔离的 HTTPS 发布
数据可视化桌面应用数据分析【免费下载链接】PlotJugglerThe Time Series Visualization Tool that you deserve.项目地址https://gitcode.com/gh_mirrors/pl/PlotJuggler点击查看免费下载PlotJuggler 4 的浏览器版本是一个静态的、启用多线程Pthreads SharedArrayBuffer的 Qt/WebAssembly 应用其部署方式与普通前端站点有本质区别它必须运行在启用跨源隔离的 HTTPS开发期可为 localhost环境之下并配合严格的内容协商、缓存与头部契约。本文基于仓库 docs/WASM_DEPLOYMENT.md 与其配套脚本、测试完整讲解从 CMake 交叉构建、内容寻址打包到参考服务器与 Playwright 验收测试的全套流程读完即可在任意支持 Netlify/Cloudflare Pages 头部格式或等价能力的托管平台上正确发布 PlotJuggler 4。为什么浏览器版 PlotJuggler 不能“随手打开”与普通静态网站不同PlotJuggler 4 的 Wasm 构建依赖 Emscripten 的 Pthreads 运行时与共享内存SharedArrayBuffer这两项能力在浏览器中都有硬性前置条件必须通过 HTTPS 提供服务开发期 localhost 例外否则浏览器不会启用isSecureContext所要求的特性必须启用跨源隔离Cross-Origin Isolation即响应携带Cross-Origin-Opener-Policy: same-origin与Cross-Origin-Embedder-Policy: require-corp否则SharedArrayBuffer不可用直接从磁盘双击打开index.html、或使用普通的python -m http.server均不构成受支持的多线程运行环境——前者连 HTTP 响应头都无法提供后者缺失隔离与 MIME 配置。这一点在部署验收测试 tests/wasm/deployment.spec.js 中有直接印证测试显式断言页面中crossOriginIsolated为真、isSecureContext为真、typeof SharedArrayBuffer function任何一项不满足都会导致多线程应用启动失败。Qt 官方 Wasm 部署指南与 Emscripten 的 WebAssembly server setup、Pthreads support 文档分别从 HTML/JS loader/Wasm 模块生成、application/wasmMIME 与 COOP/COEP 角度覆盖了相同要求本文以下内容则以 PlotJuggler 仓库自身的实现为准。构建与打包可复现的发布流水线工具链版本固定发布工具链的精确版本统一固定在仓库根目录的 versions.env 中作为 CMake、脚本、Docker 与 CI 的单一事实来源PJ_APP_VERSION4.0.0 PJ_QT_VERSION6.11.1 PJ_EMSCRIPTEN_VERSION4.0.7 PJ_WASM_NODE_VERSION22.22.1其中 WebAssembly 构建与桌面构建共用PJ_QT_VERSIONQt 6.11 针对 Emscripten 4.0.7 提供多线程工具链Node 则负责确定性压缩输出。保持这些版本精确固定是“相同输入产生字节级一致发布包”的前提。CMake 交叉构建release 工作流的本地等价命令如下先激活 Emscripten SDK 环境source /path/to/emsdk/emsdk_env.sh cmake -S . -B build-wasm -G Ninja \ -DCMAKE_TOOLCHAIN_FILE/path/to/Qt/PJ_QT_VERSION/wasm_multithread/lib/cmake/Qt6/qt.toolchain.cmake \ -DQT_HOST_PATH/path/to/Qt/PJ_QT_VERSION/gcc_64 \ -DCMAKE_BUILD_TYPERelease \ -DPJ_BUILD_TESTSOFF -DPJ_BUILD_DEMOSOFF \ -DPJ_WASM_WITH_SCENE2DON -DPJ_WASM_WITH_SCENE3DOFF cmake --build build-wasm --target pj_app --parallel 4关键点wasm_multithread工具链必须使用 Qt 的多线程 Wasm 工具链文件这是产出含 Pthreads 运行时与共享内存产物的前提-DQT_HOST_PATH指向同版本桌面 Qtgcc_64供交叉编译期使用宿主工具PJ_WASM_WITH_SCENE2D / PJ_WASM_WITH_SCENE3DWasm 特性开关。Scene2D 开启、Scene3D 关闭是文档给出的参考组合这些开关与仓库中 cmake/PjWasmScene2DDependencies.cmake、cmake/PjWasmScene3DDependencies.cmake 等依赖装配脚本联动。若启用 ROS/Protobuf 解析插件则还需满足 cmake/PjWasmPluginCommon.cmake 对固定官方插件源码目录PJ_OFFICIAL_PLUGINS_SOURCE_DIR的要求否则会在配置期直接 FATAL_ERROR--target pj_app产出核心应用目标其构建产物位于build-wasm/pj_app包含plotjuggler4.html、plotjuggler4.js、plotjuggler4.wasm、qtloader.js与qtlogo.svg。打包内容寻址的确定性发布目录构建完成后用打包脚本生成部署包node scripts/package_wasm.mjs \ --source build-wasm/pj_app \ --output build-wasm/deployscripts/package_wasm.mjs 是打包的权威实现它做了三层防御性校验源产物校验validateSource要求plotjuggler4.html及四个必需工件全部存在正则检测plotjuggler4.js中是否保留 Emscripten 的PThread运行时标识与shared: true共享内存描述符并对.wasm文件检查 WebAssembly 魔数头\x00asm。任何缺失、无效或单线程构建产物都会被拒绝打包输出目录安全validateReplaceableOutput为避免手滑写错--output导致误删无关数据脚本只允许替换三种情况——目录不存在、目录为空、或目录内含format org.plotjuggler.wasm-deployment.v1的先前 PlotJuggler 发布包其他非空目录一律拒绝。且目录会在压缩完成后、替换前再次复查杜绝并发写满造成的误删路径约束源码目录与输出目录必须互不嵌套、不能指向文件系统根目录。打包后得到如下稳定布局build-wasm/deploy/ ├── index.html ├── manifest.json ├── _headers └── assets/sha256-bundle-id/ ├── plotjuggler4.js[.br|.gz] ├── plotjuggler4.wasm[.br|.gz] ├── qtloader.js[.br|.gz] └── qtlogo.svg[.br|.gz]入口index.html稳定不变打包脚本将源码plotjuggler4.html中的srcplotjuggler4.js等引用改写为内容寻址路径并注入locateFile回调使 Wasm 模块也从assets/bundle-id/加载见脚本中replaceExactlyOnce与qtLoad标记改写逻辑bundle-id是内容寻址的由四个运行时工件各自的文件名、字节数、SHA-256 摘要串联后再次取 SHA-256 的前 32 位十六进制组成sha256-32 hex。任一运行时工件变化目录名随之改变旧 URL 自然失效压缩变体.js、.wasm、.svg、.html属于可压缩类型字节数不低于 1024 的工件会生成.br与.gz两个变体Brotli 固定使用 quality 9、窗口 22脚本注释说明 quality 11 在参考主机上耗时超过五分钟仍无法完成quality 9 是发布侧的成本权衡Gzip 固定 level 9 且将 mtime 归零、OS 字节置为 255RFC 1952 的“unknown”以消除不同平台 Node 运行时的字节差异。manifest.json发布包的“契约清单”scripts/package_wasm.mjs 生成的 manifest.json运行时产物逐文件记录每个逻辑文件identity/Brotli/gzip 三种表示的路径、字节大小、SHA-256、MIME 类型、缓存类别revalidate或immutable压缩运行时与参数Node 版本、zlib 版本、Brotli quality/window、Gzip level/mtime/OS必需的响应头集合COOP/COEP/CORP/nosniff与两类缓存策略字符串_headers文件自身的路径、字节数、SHA-256作为“部署配置”独立纳入清单。正因为 Node 版本被 release CI 固定PJ_WASM_NODE_VERSION、压缩参数全部写死、gzip 元数据归一化相同输入必然产出字节级一致的发布包这为发布审计与复现提供了坚实基础。生成的 _headers 文件打包脚本同时生成_headers文件其内容由deploymentHeaders()函数产出面向支持 Netlify/Cloudflare Pages_headers格式的托管平台/* Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Resource-Policy: same-origin X-Content-Type-Options: nosniff / Cache-Control: no-cache /index.html Cache-Control: no-cache /manifest.json Cache-Control: no-cache /assets/sha256-bundle-id/* Cache-Control: public, max-age31536000, immutable需要注意_headers只负责配置头部它并不会让托管平台自动在.br/.gz与 identity 之间做预压缩变体选择——预压缩变体的启用仍需在托管平台侧显式开启。必需 HTTP 契约浏览器侧生命线隔离与安全头部每一个响应——包括入口页与运行时资源——都必须携带以下四个头部HeaderValueCross-Origin-Opener-Policysame-originCross-Origin-Embedder-Policyrequire-corpCross-Origin-Resource-Policysame-originX-Content-Type-Optionsnosniffsame-origin的 COOP/COEP 组合把窗口变成可与自身共享内存的隔离上下文启用 Pthreads 的SharedArrayBufferCORP: same-origin防止其他源嵌入资源nosniff阻止 MIME 嗅探。参考服务器 scripts/serve_wasm.mjs 与测试 tests/wasm/deployment.spec.js 均以这四个值作为硬性断言。内容协商三态编码选择对每个逻辑资源 URL应按以下优先级响应当Accept-Encoding允许br时优先返回其.br兄弟文件并携带Content-Encoding: br否则若允许gzip返回.gz并携带Content-Encoding: gzip否则返回 identity 原文件不设Content-Encoding。同时始终保持逻辑资源的 MIME 类型——尤其是plotjuggler4.wasm必须返回Content-Type: application/wasm这是浏览器启用流式编译streaming compilation的前提凡存在编码变体的资源必须返回Vary: Accept-Encoding否则共享缓存在不同客户端之间会串味。参考服务器 scripts/serve_wasm.mjs 完整实现了这一协商它解析Accept-Encoding的 q 值含*通配与identity;q0的显式禁用在 br/gzip/identity 之间按“q 值优先、br gzip identity 次序兜底”选择表示并以所选表示的 SHA-256 生成强ETagsha256-...支持If-None-Match条件请求返回 304。它还会拒绝未在 manifest 中声明的文件返回 404、Cache-Control: no-store避免把部署包之外的杂散文件暴露出去。缓存策略入口可换新、资产不可变稳定的index.html与manifest.json使用Cache-Control: no-cache客户端每次都会向服务器重新校验以便获取新 bundle 的入口assets/sha256-bundle-id/之下的所有文件使用Cache-Control: public, max-age31536000, immutable因为其 URL 随任何运行时资产的变更而整体变化可安全长缓存一年。若托管平台不支持预压缩变体也可以忽略.br/.gz兄弟文件、改用平台自身的等效动态压缩前提是保持相同的 MIME、隔离与缓存契约不变。跨源数据与全局策略应用运行时加载的跨源数据如远程数据集、ROS/Protobuf 流有自己独立的 CORS/CORP 要求。文档明确提醒不要为了迁就某个无关的远端服务器而全局弱化应用资产的隔离策略——跨源数据应在其数据源上显式配置 CORS/CORP应用资产的四头部契约必须原样保留。浏览器本地状态什么能持久、什么绝不能持久Wasm 版的浏览器本地状态模型在 pj_app/src/BrowserPersistence.h 中有权威定义其实现见 pj_app/src/BrowserPersistence.cpp上传的文件被暂存在页面级临时文件系统获得不透明的浏览器身份标识刷新页面即丢失不会持久化普通的QSettings调用者在 Wasm 下被重定向到页面生命周期存储Wasm 默认后端指向/tmp所有既有调用方在“当前页面”范围内仍然可用但不会意外地让路径、插件配置、凭据等内容变得长期持久唯一真正跨刷新持久的浏览器状态只有两类且都由BrowserPersistence拥有经过类型化校验的偏好 allowlistdurablePreferenceKeys()/sanitizePreference()只有显式列入 schema 的键、且值通过类型校验才允许写入持久层一个有限的、无数据源绑定的通用布局 recipe 列表recentLayouts()/rememberGenericLayout()且isSafeGenericLayoutRecipe()对 XML 做安全校验。与此相对路径、上传身份、插件配置与凭据被有意排除在浏览器本地持久化之外。另外带数据源绑定的布局在回放时下载的是“逻辑引用”需要用户在重放时显式重新选择对应文件而不是自动恢复路径。本地服务与发布验收用参考服务器验证一切参考服务器仓库提供了 manifest 驱动的本地参考服务器node scripts/serve_wasm.mjs --root build-wasm/deploy --port 6931scripts/serve_wasm.mjs 的实现要点默认绑定127.0.0.1--host可改--port 0可选临时端口启动时强制校验 manifest 的格式、入口、必需头部集合、缓存策略以及_headers文件与 manifest 记录的字节数/SHA-256 一致性任何偏差都会拒绝启动只服务 manifest 声明过的文件执行真实的 Brotli/gzip 内容协商返回生产级头部与缓存契约支持条件请求304与 HEAD它定位为正确性参考与开发服务器不是托管 TLS 或高可用的生产服务。Playwright 部署验收测试仓库以 Playwright 对打包产物做端到端验收命令如下cd tests/wasm npm ci npx playwright install chromium PJ_WASM_PACKAGE_DIR$PWD/../../build-wasm/deploy npm run test:deployment其中test:deployment由 tests/wasm/package.json 映射到 tests/wasm/deployment.playwright.config.js单 worker、180 秒超时、失败截图执行 tests/wasm/deployment.spec.js 中的两组测试协议级校验直接以原始 HTTP 请求断言 manifest 格式与打包运行时参数_headers的字节数与哈希入口页在Accept-Encoding: identity下的text/html、no-cache与注入的内容寻址src对 Wasm 资源分别以br, identity;q0、gzip, identity;q0、identity请求逐一核对Content-Type: application/wasm、Content-Encoding、Cache-Control: public, max-age31536000, immutable、Vary: Accept-Encoding、ETag、响应字节数与 SHA-256 与 manifest 完全一致If-None-Match返回 304未声明文件与_headers本身均返回 404冷启动浏览器验收用全新的 Chromium 从打包根目录启动等待 Qt 应用就绪#screen可见、无Application exit错误、控制台出现Scanning 0 plugin folder(s)并断言crossOriginIsolated、isSecureContext、SharedArrayBuffer三者全部可用plotjuggler4.wasm实际以br编码、immutable 缓存被加载且全程无页面异常。这组测试把“原始编码字节哈希、MIME、缓存/隔离头部、条件请求、多线程冷启动”全部固化成了可重复的发布门槛任何破坏 HTTP 契约或打包正确性的改动都会在此被拦截。部署到托管平台的核对清单综合上述契约将发布包部署到任何托管平台前应逐项核对上传build-wasm/deploy目录的全部内容含_headers与assets/sha256-bundle-id/下的全部编码变体确认平台应用了四头部契约Netlify/Cloudflare Pages 可通过_headers其他平台请在平台配置或边缘函数中显式添加确认平台对.br/.gz预压缩变体启用内容协商或接受动态压缩并保持 MIME/缓存/隔离契约不变确认.wasm响应为application/wasm且带Vary: Accept-Encoding入口与manifest.json走no-cacheassets/走public, max-age31536000, immutable上线前用node scripts/serve_wasm.mjs本地跑通参考服务器再执行上述 Playwright 部署验收测试跨源数据源单独配置 CORS/CORP绝不为此全局弱化应用资产策略。完成以上步骤PlotJuggler 4 的多线程 Wasm 构建即可在浏览器中稳定运行并获得与桌面端一致的交互体验。赞分享数据可视化桌面应用数据分析【免费下载链接】PlotJugglerThe Time Series Visualization Tool that you deserve.项目地址https://gitcode.com/gh_mirrors/pl/PlotJuggler点击查看免费下载相关推荐Flow 类Classes类型系统完全指南名义类型、方法接收者语义与泛型实战Flow 类Classes类型系统完全指南名义类型、方法接收者语义与泛型实战 本指南以 Flow 官方文档 website/docs/types/clas数据可视化桌面应用数据分析Sogen开发者指南如何扩展和定制自己的模拟器功能Sogen开发者指南如何扩展和定制自己的模拟器功能 Sogen是一个高性能的Windows用户空间模拟器它通过系统调用级别的仿真为安全研究、恶意软件分析和DPlotJuggler 4 从源码构建全指南Linux / Windows 双平台编译、测试与离线打包实战PlotJuggler 4 从源码构建全指南Linux / Windows 双平台编译、测试与离线打包实战 本文围绕仓库 docs/BUILDING.md h数据可视化桌面应用数据分析上一篇Triangles社区贡献指南如何参与开源项目开发 下一篇如何快速构建企业级权限管理系统FastAPI React的终极安全解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Fantastic-admin 路由生成器实战:从路由文件到导航菜单、权限与保活的完整配置指南

Fantastic-admin 路由生成器实战:从路由文件到导航菜单、权限与保活的完整配置指南

前端AI 技能 【免费下载链接】basic ⭐⭐⭐⭐⭐ 面向 AI 编程的管理系统框架,兼容PC、移动端。AI-oriented management system framework, compatible with PC and mobile device. 项目地址: https://gitcode.com/GitHub_Trending/ba/basic 点击查看 免费…

2026/10/3 13:37:42 阅读更多 →
矩阵前乘矩阵后乘——几何变换

矩阵前乘矩阵后乘——几何变换

在2000年前,矩阵乘法的规范是行向量表示(矩阵后乘),其实这种表示更符合信号变换的基向量展开公式,但是2000年后,规范就改为了列向量表示(矩阵前乘),在两年前MATLAB将最后…

2026/10/3 13:37:42 阅读更多 →
使用FFMPEG处理mkv

使用FFMPEG处理mkv

注:以下命令均为powershell命令 使用FFMPEG将mkv批量转为mp4 硬烧录字幕 处理当前目录下的所有mkv文件。同时硬烧录第一个轨道的字幕(嵌入画面)。 Get-ChildItem *.mkv | ForEach-Object { ffmpeg -i "$($_.Name)" -vf "subti…

2026/10/3 13:37:42 阅读更多 →

最新新闻

水稻病虫害识别系统源码实战:Python机器学习从训练到部署

水稻病虫害识别系统源码实战:Python机器学习从训练到部署

简介:这份资源是基于Python机器学习的水稻病虫害自动识别系统源码包,面向农学信息化方向的学生、课程设计开发者及希望入门图像分类实战的工程师,用于解决水稻病虫害人工识别效率低、经验依赖强的问题。压缩包共310个文件,约2.56M…

2026/10/3 15:26:08 阅读更多 →
QuickBlue AI应用底座:企业大模型落地与实战指南

QuickBlue AI应用底座:企业大模型落地与实战指南

1. QuickBlue 到底是什么先给结论:QuickBlue 不是一个具体的业务软件,也不是某个大模型的名字,而是一套专门给企业做 AI 应用落地用的“中间层平台”。你可以把它理解成企业 AI 时代的“水电煤接口”——它不直接生产水电煤,但它让…

2026/10/3 15:26:07 阅读更多 →
密度算符完全指南:从混合态到量子噪声与纠缠判定

密度算符完全指南:从混合态到量子噪声与纠缠判定

做量子计算方向的人,尤其是刚开始啃量子信息理论的同学,几乎都会在某个阶段撞上同一个坎:前面几章还在用波函数 |ψ⟩ 描述一切,到了讲量子噪声、开放系统、部分测量、纠缠判定的时候,所有公式突然都换成了 ρ&#xf…

2026/10/3 15:26:07 阅读更多 →
UE5、3A与开放世界:从刀光材质到网络同步的技术拆解

UE5、3A与开放世界:从刀光材质到网络同步的技术拆解

1. 从一场发布会聊起:UE5、3A、开放世界到底在说什么如果你最近刷到过腾讯游戏发布会的相关消息,大概率会被几个词反复轰炸:UE5、3A、开放世界。这三个词放在一起,基本就是当下游戏行业最顶配的“技术三件套”。但很多人看完发布会…

2026/10/3 15:26:07 阅读更多 →
Arch Linux双系统安装全指南:从分区到引导修复避坑实战

Arch Linux双系统安装全指南:从分区到引导修复避坑实战

看过太多新手在Arch Linux双系统上翻车,有的把Windows引导搞没了,有的分区时手一抖把整个盘抹了,还有的装完进不去桌面只能干瞪眼。这篇文章直接把我踩过的坑和验证过的流程全写出来,从Windows下分区、做启动盘、改BIOS&#xff0…

2026/10/3 15:26:06 阅读更多 →
TSMaster Python二次开发:CAN/CANFD总线采集与周期告警实战

TSMaster Python二次开发:CAN/CANFD总线采集与周期告警实战

上个月接了一台新能源样车的数据采集任务,甲方要求把整车上CAN和CANFD两条总线跑的关键报文实时抓下来,还要能看到发动机转速、车速、电池SOC,一旦发现某个报文周期异常就自动弹提示。如果用老办法一边开TSMaster界面一边盯监控窗口&#xff…

2026/10/3 15:25:06 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 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/2 10:36:31 阅读更多 →
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/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练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/3 9:42:36 阅读更多 →