TE文档检索 Agent

输入产品编号/文档编号,自动解析并下载产品图纸、产品规格、CAD文件

浏览器插件 · 最新版本 V0.6.19
📱 移动端 安卓系统 点击下载APK开始测试

02安装到浏览器(3 步)

  1. 解压下载的 zip,得到插件文件夹
  2. 打开浏览器,地址栏输入 chrome://extensions(Edge 用 edge://extensions)并回车
  3. 打开右上角「开发者模式」→ 点「加载已解压的扩展程序」→ 选中解压出来的文件夹
工具栏出现橙色「TE」图标即安装成功。更新插件时,在扩展页点刷新图标(↻)即可。

03部署插件说明

1部署插件(只做一次)

1.1 需要准备的文件

  • 解压后的插件文件夹内应有 manifest.json、background.js、popup.html、popup.css、popup.js、icons/(4 张图标)共 6 项(★ V0.6.13 起不再附带 部署说明书.txt,内容已全部云端化)。
  • 必须原样同在同一个文件夹里:不要删改、不要只复制其中几个文件,也不要把 popup.js 单独拎出来。
  • 不需要安装任何编程环境,也不依赖专有服务器——只要能正常上网、能打开 te.com.cn 就能用。

1.2 安装 5 步(Chrome / Edge 通用)

  1. 打开浏览器(Chrome 或 Edge 都一样)。
  2. 地址栏输入 chrome://extensions(Edge 用 edge://extensions)回车。
  3. 点右上角「开发者模式」开关,变为打开/蓝色状态。
  4. 点左上角「加载已解压的扩展程序」,在弹窗里选中整个插件文件夹(不要点进去只选某个文件),点「选择文件夹」。
  5. 出现名为「TE 产品文档检索」、图标为橙色 TE 的卡片即安装成功。
装过旧版时,请先把旧版卡片移除再加载新版——V0.5.1 之后各版文件名完全相同,不移除会继续运行旧代码。

1.3 首次启用的一次性迁移

  • 为让此后更新全自动且扩展 id 不变(工具栏固定不丢),首次启用需把插件加载目录切换到 下载\TE AGENT UPDATE\current\extension\。
  • 点弹窗标题右侧的「更新」按钮,按提示走一遍迁移引导(会给出「打开扩展管理页」的一键入口)。
  • 只撞一次:迁移完成后,往后每次更新都是零人工;未迁移时更新会给出琥珀色横幅引导。

1.4 以后怎么更新

  • 推荐:弹窗里的「更新」按钮——自动比对云端 version.txt → 下载 → 内存解压 → 覆盖重建更新目录 → 自动刷新插件,成功后显示绿字横幅并自动清理浏览器下载记录(只删记录、不删文件)。
  • 最朴素:扩展管理页点刷新图标(↻)——适合手动换了加载目录的情况。
  • 兜底:重新下载本页 zip,解压覆盖后按 1.2 重新加载(或先移除旧版)。
  • 更新会不会丢设置:不会。文档类型、保存路径、重名模式、产品图方式与数量、预览开关都存在浏览器本地,更新后依然保留。

1.5 为什么首次必须人工一次(三条浏览器硬边界)

  • 浏览器不提供「程序化加载未打包扩展」的 API——加载文件夹必须人在扩展管理页点一次。
  • 工具栏图标的固定/取消固定没有公开 API,只能人工点(或由企业策略强制)。
  • 删除扩展必定弹一次确认框,无法静默卸载。
  • 因此选择了就地更新路线:加载目录固定,更新时只重建目录内文件再自动刷新,id 不变、固定不丢,代价就是首次迁移这一次人工。

1.6 拷给同事 / 换一台电脑

  • 把整个插件文件夹(或本页的 zip 包)拷过去,在对方电脑上按 1.2 重新加载一次即可。
  • 对方电脑首次使用同样建议先走一遍 1.3 迁移,之后即可自动更新。
  • 卸载:扩展管理页点「移除」;仅换目录不改内容时,无需卸载,直接在新目录点「加载已解压的扩展程序」并移除旧的。

2更新与维护

2.1 「更新」按钮做了什么

  1. 读取云端 version.txt,与本地 manifest.json 版本做语义化比较(高于/等于/低于三态)。
  2. 云端更高时下载对应版本 zip,在内存中解压(不落临时文件),校验含 manifest.json、拒绝路径穿越。
  3. 逐文件覆盖写入 下载\TE AGENT UPDATE\current\extension\,登记更新意向后 chrome.runtime.reload() 自动刷新。
  4. 刷新后自检对账:版本已变=更新成功(绿字横幅);版本没变=当前仍从旧目录加载,给出一次性迁移引导(琥珀色横幅 + 写明三步)。

2.2 更新目录与覆盖写入的两条保障

  • 为什么允许覆盖:铁律的本意是「绝不覆盖你的业务文档」。更新目录里只有插件自己的程序文件,同名文件必须覆盖,否则会堆出 popup (1).js 这类副本直接毁掉扩展文件夹。
  • 收窄到极小的例外:全插件只有一个覆盖入口,且路径必须位于 TE AGENT UPDATE/current/extension/ 之下,否则直接拒绝;后台 service worker 侧再做一次同样的白名单校验双保险。
  • 必然置顶提示:只要触发覆盖写入,弹窗最顶部就出现红底横幅「已覆盖写入 N 个文件:…」,记录持久保存,点「知道了,清除提示」才消失——「触发」与「必然提示」在代码结构上强绑定。
  • 防干涉:保存路径设为 TE AGENT UPDATE 会被拒绝并红字提示,历史冲突值自动回退默认。

2.3 更新被浏览器拦住(.js 拦截)

  • Edge 对 .js 有内建拦截,弹「文件可能损害设备」属正常现象——弹窗内会直接亮出红底横幅与「放行并继续更新」按钮,点一下即放行。
  • 不要去下载面板点「保留」:那会关闭弹窗导致更新中断;拦截期间插件不再盲目重试(不会产生重复下载条目)。
  • 落盘文件带 MOTW(受保护来源标记)属正常,不影响插件运行。

2.4 更新后下载列表出现大量散装文件

  • v0.6.8 起:横幅结构化美化,并新增「点击此处打开下载文件夹」——精准定位到插件更新目录,且不残留任何下载记录。
  • 更新成功后自动清理浏览器下载历史(只删记录、不删文件),被拦截待确认的 .js 绝不清理。
  • 审计报告不参与就地更新落盘(只保留在云端站点);★ V0.6.13 起 部署说明书.txt 已下线(内容全部云端化:部署步骤见 1.x,常见问题见使用策略第 9 章),不再随包分发。

2.5 遇到问题的排查顺序

  • 先看版本:插件标题行版本号是否与云端一致;一致却行为异常,先按「重新加载」或走一次完整更新。
  • 再排除环境干扰:公司访客网/代理会拦截更新站点(跳转到拦截页,表现为 Failed to fetch),换手机热点即可,属环境问题非插件 bug。
  • 最后排查扩展冲突:文件夹归类异常、重名策略不生效,多为其他下载类扩展(名字带「下载」「Download」「Marvis」)抢走了文件名——浏览器规定多个扩展同时决定文件名时以最后一个为准,插件无法在代码层面强制胜过它。
  • 逐个临时停用带下载管理功能的扩展,每停一个重下一次;停到哪个立刻正常,那个就是元凶。

04使用策略

1使用流程
  1. 打开插件:点浏览器工具栏的橙色 TE 图标。首次使用需在扩展页确认启用。
  2. 勾选文档类型:产品图纸 / 产品规格 / CAD文件,默认三项全选,只要某几类时取消其余;CAD 细分格式在设置「CAD文件筛选」里勾选(默认仅 3D_STP)。
  3. 输入产品编号:每行一个,支持一次粘贴多个(例:5-928999-1、175266-7)。
  4. 点「检索文档」:等待结果。编号多时进度会显示在按钮上;中途可「取消」暂停,之后「继续检索文档」接着跑。
  5. 下载:单卡点卡片上的「下载」;全部点「下载全部文档」(可另点「下载全部产品图」)。按钮会实时显示进度。
  6. 查看结果:下载完成后到 下载\TE Web Download\<编号>\ 目录查看;下错版本可在设置里改路径后重下。

2检索规则

2.1 编号怎么写

  • 产品编号:正常 TE 料号,如 5-928999-1、175266-7、1534334-1。
  • 文档编号:108- / 114- / 501- / 411- 开头的,会自动走官网「按文档编号搜索」,无需登录,结果只列 PDF。该通道不做语言筛选——官网按编号点名返回该编号下全部语言 PDF,版本取舍交给你(详见 5.3 语言版本筛选)。
  • 自动换算:勾了「产品图纸」但该料号查不到图纸时,插件会把料号掐头去尾换算成文档编号再找一次(2-2378904-1 → 2378904),命中的文件会标记「产品图纸(文档编号)」。
  • 二次检索兜底:按料号检索失败时,插件会自动再按文档编号通道找一次,避免漏掉官网只按编号挂档的资料。

2.2 最近检索与叠加 / 覆盖

  • 弹窗底部「最近检索」保存查过的编号,点一下即回填输入框。
  • 覆盖:新编号整框替换旧内容(默认)。叠加:另起一行追加,可连挑多个编号一起检索。

2.3 暂停与继续(多编号时省时间)

  • 检索中「清空」会变成「取消」:点一次显示「再次点击确认取消」,3 秒内再点一次生效(防误触),不点自动回退。
  • 确认后是暂停而非丢弃:在当前编号完成后停下(安全断点在编号之间,图框识别中途不会被打断)。
  • 「检索文档」变为「继续检索文档」,点击从断点继续;断点会保留,关掉弹窗再打开也能恢复。
  • 检索完成或点「清空」后,按钮恢复原样并丢弃断点。

3怎么看结果

3.1 标题行三色(重要)

结果卡片顶部的产品编号标题行,用底色告诉你这一行的规格识别情况:

  • 淡红色=该料号的产品图纸没能从图框读出产品规格编号。常见原因:扫描件无文字层、图框本就没印 SPEC 编号。建议手动核对规格文档是否齐全。
  • 淡绿色=成功识别出图框规格编号,且按该编号检索到了对应的产品规格文档(命中或补全)。
  • 淡黄色=成功识别出图框规格编号,但按编号没检索到任何文档。

3.2 卡片上的徽章

  • 状态徽章(如「有效」「试产」):官网标注的产品状态。
  • 规格来源徽章(紫色,如 PRODUCT SPEC 108-18030):这份规格是靠图框识别出来的,括号里是命中的图框编号类型与编号;文档编号 等徽章则标明其他来源。
  • 勾了「产品图纸」但没图时,缩略图位置显示占位框而不是空白(可随「显示产品图预览」一起关闭)。

3.3 产品图与灯箱

  • 标题右侧是首张产品图缩略图,点击弹出灯箱看全图,灯箱内可「下载此图」。
  • 灯箱内用左右按钮或键盘 ← / →切换该编号的全部产品图,「下载此图」只下当前那一张(文件名保留 _P序号)。
  • 「下载产品图(ZIP · N张)」把该编号全部图片打包成 PIC_编号.zip。
  • 高清规则:官网专属 DAM 图可升到高清;共享图库兜底图受官网原图限制最大 200×114,预览下载可用但灯箱不会升高清。

4下载与归档

4.1 两种下载模式

  • 独立按钮(默认):「下载全部文档」和「下载全部产品图」是两个按钮,按需分别点。
  • 集成按钮:合成一个「下载全部文档和产品图(文档N份/图片M张)」,点一次先下文档、再接着处理产品图。
  • 批量按钮全部成功后置灰冻结为「已完成(n/N)」,下次检索或点「清空」后恢复。

4.2 进度与终止下载

  • 下载中按钮实时显示进度:正在下载文档 17/91 组 + 图片 0/91 组(按产品编号计组)。
  • 下载不会被弹窗打断:下载在后台进行,隐藏/关闭/重开弹窗都继续;重开后进度自动接上。
  • 下载中「清空」变成「终止下载」:点一次显示「确认终止 无法恢复」,3 秒内再点一次生效;已下载的全部保留,未下载的不再下,不支持续传(重下会从头开始,重名自动加后缀)。

4.3 保存位置与重名

  • 默认存到 下载\TE Web Download\<编号>\,可在设置里改路径(修改 按钮)。
  • 文件夹固定按浏览器默认下载目录下的相对路径存放;要改根目录请用设置里的「浏览器下载设置」。
  • 同名处理由设置「重名自动加后缀」决定:重名文件夹(1)(新建带序号的文件夹)或 重名文档(1)(文件名加序号)。

4.4 CAD 与产品图文件

  • CAD 文件:STP / IGS / DXF 为 zip 包,3D PDF 为普通 PDF;在设置「CAD文件筛选」里勾选要下载的格式(默认仅 3D_STP,STP 随主勾选锁定常开,主勾选关闭 = 不下载任何 CAD);「CAD文件解压」勾选的格式下载时自动解压成散件逐个落盘(zip 本身不保留),解压失败自动回退保存原 zip。
  • 产品图:设置为「首张」时每个编号只下第 1 张(文件名不带 _P序号);设为「全部」时打包成 PIC_编号.zip。

5图框识别与规格处理(进阶)

5.1 它在做什么

  • 插件会读取产品图纸右下角图框里印的 PRODUCT SPEC / APPLICATION SPEC 编号——检索之后、下载之前就能读到,不必先保存到本地。
  • 识别成功后再据此处理「产品规格」:按图框编号过滤或补全相关规格文档。
  • 识别顺序恒定优先英文版图纸(英文→中文→德语→日语→最后一张),与显示筛选互不影响。

5.2 两个关键开关

  • 下载筛选:开启=只保留图框 SPEC 编号命中的产品规格;关闭=产品规格不做筛选、全部保留。
  • 触发时机:检索文档(默认,检索时顺带自查,落点早、心里有数)或 下载全部文档(点下载时才查)。
  • 若识别不到编号,插件不会硬筛,而是全部保留规格并提示可能原因(扫描件/文字转矢量轮廓无文字层、该版图框未印编号),此时请人工核对。

5.3 语言版本筛选

  • 产品图纸语言版本筛选:同一料号挂多张 PDF 图纸时,只显示所选语言那一张(英文/德语/日语/全部)。仅 1 张时不筛选。
  • 产品规格语言版本筛选(默认优先英文):对「产品规格」文档同理;仅 1 份时不筛选;所选语言一份都没命中时全部保留兜底。
  • 适用范围(重要):语言版本筛选只作用于「产品图纸」「产品规格」两类。直接以 108-/114-/501-/411- 文档编号检索得到的「文档编号」类结果,是官网按编号点名返回的全部语言 PDF,不做语言筛选——属设计使然(点名要某份资料,版本取舍交给你),如需只看某语言请手动挑。它也不受「下载筛选 / 触发时机」开关约束。
  • 两者都受「下载筛选 / 触发时机」开关约束。

5.4 局限与不足(务必先读这一节)

图框识别是插件里最依赖外部条件的一项功能:它靠「读PDF 里印着的文字」工作,因此图纸本身必须具备可读的文字层,且图框里确实印了编号,才可能成功。下面把必要条件、失败原因与固有限制一次说清,避免你把「识别不到」当成插件故障。

5.4.1 成功识别规格编号的必要条件(四个必须同时满足)
  • 条件一 · 结果类型勾选了「产品规格」:你处理的是规格文档,不勾这一项就无从谈起。
  • 条件二 · 触发时机 = 检索文档(默认)。选「下载全部文档」时,识别发生在点下载那一刻,结果不反映在检索列表的三色标题上。
  • 条件三 · 该料号存在产品图纸 PDF,且插件能取到它的字节流;取不到(例如只有规格、图纸挂在需要登录的页面)就没有识别对象。
  • 条件四 · 该 PDF 有真实文字层,且图框里印有 SPEC 编号——这是最关键也最容易不满足的一条,见下节。
5.4.2 识别失败的所有可能原因(按发生频率排序)
  • ① PDF 没有文字层(最主要原因,硬限制):包括扫描件/图片型 PDF(整页是一张扫描图)、「文字转矢量轮廓」型 PDF(在Word/Illustrator 等排版软件里把文字转成线条再导出,视觉上是字、物理上不是字符)。这类文件里根本没有可提取的字符,任何插件、任何版本都读不出来——这是物理限制,不是能力不足。
  • ② 图框里本来就没印编号:部分厂商/某些年头的图纸模板,图框中不含 PRODUCT SPEC / APPLICATION SPEC 栏位,或只印了别的编号体系(如只有图号、版本号、料号)。
  • ③ 文字被拆分或编码异常:编号被排版拆成多段、字符间插入空格或不可见字符、字体子集化且无ToUnicode 映射(显示正常但提取出乱码),都会导致编号正则匹配不上。
  • ④ 图框位置超出识别范围:识别只扫右下角图框区域(dy 在合理范围内、横向配对距离受限)。若该图纸版式特殊、图框偏上/偏大/被旋转,编号可能落在扫描窗口之外。
  • ⑤ 目标图纸没取到或取错:多张图纸时会按 英文→中文→德语→日语→最后一张依次尝试目标图纸;该料号只有扫描件德语版而英文版取图失败时,会先用扫描件尝试(必然失败)再继续,仍失败即如实提示。
  • ⑥ 网络或格式异常:官网返回非 PDF(登录页/错误页/HTML)、文件下载不完整或已损坏,解压与解析均会失败。
  • ⑦ 识别拿到了编号,但那一版规格在官网确实没有对应文档:此时不是识别失败——识别已成功,只是按编号没检索到文档,标题会显示为淡黄色。请按「已识别但没文档」来核对,而不是怀疑识别。
5.4.3 固有限制(即使一切正常也存在)
  • 只认图框里印的规格编号,不做语义推断:插件不会「猜」某份规格是否属于该产品,编号不在图框里就完全不参与处理。
  • 不处理编号之间的关系:图框里印多个 SPEC 编号(APPLICATION SPEC + PRODUCT SPEC 等)时会全部识别并各自处理,但不判断哪个才是主规格,也不做版本新旧推断。
  • 一图一号不做合并推断:同一料号挂多份图纸时,各图识别结果并列保留,不会因为「其中一张没印编号」就判定整个料号无规格。
  • 不做 OCR:这是刻意的取舍——OCR 会引入误识别,一旦猜错就可能错误过滤掉你真正需要的规格文档,属于宁可漏也不错的风险。因此宁可「全保留 + 明确提示 + 人工核对」,也不猜。
  • 不做图纸版本新旧判断:多语言/多版本图纸全部视为有效候选,不按日期或版次择优(识别目标图纸除外,那里有固定优先级)。
  • 不做人工校正回写:识别结果只用于当次筛选与补全,不会保存为该料号的固定映射,下次检索仍会重新识别。
5.4.4 遇到识别失败怎么办(按顺序做)
  • 先看标题底色:淡黄=识别成功但没检索到文档(去核对规格是否真的存在);淡红=没读到编号(继续往下查)。
  • 把该料号的 PDF 下载到本地打开,确认图框里到底印没印 SPEC 编号——这一步能立刻区分「没印」与「印了但读不到」。
  • 若图框确实印了编号却读不到,基本可判定为无文字层(扫描件/矢量件),属硬限制,请关闭「下载筛选」保留全部规格并人工核对。
  • 换图纸版本试试:同一料号常有多个版本/语言,其中一份是矢量导出、另一份是扫描(或反之),换一版可能就能读出。
  • 仍需自动化时:先用外部工具把该 PDF 转成带文字层的版本再纳入检索,是当前唯一可行的绕行方案。

6版本明细(当前 V0.6.19)

按版本从新到旧,只列会影响使用的关键变化;逐条完整记录见上方「更新记录」区。

V0.6.112026-10-12修复致命 bug:下载编排迁入后台,隐藏/重开弹窗不再中断;新增产品规格语言版本筛选(默认优先英文);编号标题三色态;检索可暂停续跑;下载进度与终止下载;设置页文案与布局优化
V0.6.102026-10-12「更新」按钮移到版本号右侧;版本号改大写 V;图纸语言筛选新增「优先日语」;图框识别失败提示精简
V0.6.92026-10-12修复浅色设置区文字对比度;产品图占位框与缩略图同步显隐
V0.6.82026-10-12更新体验四项:横幅结构化、一键打开更新文件夹、成功后清理下载记录、设置页只读展示更新路径
V0.6.72026-10-12零规格自动补全等四组修复;状态栏颜色回归中性
V0.6.0~0.6.610 月图框 SPEC 识别与过滤/补全、共享图库兜底、图纸语言筛选、多图纸识别、就地更新(方案B)、六项界面优化
V0.5.x10 月产品图与灯箱高清、解压 CAD、二次检索兜底、文档编号通道、全部下载模式与数量设置、弹窗结果缓存
V0.1~0.410 月MVP、批量检索、文档编号检索、重名处理根治、归档路径规则

7设置项详解(含义与用处)

点插件标题右侧的「设置」打开设置页。以下 11 项按设置页从上到下的顺序说明。

7.1 默认保存路径

  • 含义:下载文件的存放根目录,默认 TE Web Download(位于浏览器默认下载目录下)。
  • 用处:点「修改」可改成任意相对目录(如加月份 TE Web Download/2026-10),按项目或月份分批归档;留空或填非法值会回退默认。
  • 要改浏览器默认下载根目录,用本行的「浏览器下载设置」跳转,插件不代管浏览器级设置。

7.2 插件更新路径(只读)与「更新」

  • 含义:就地更新专用目录 下载\TE AGENT UPDATE\current\extension\,只读展示,由「更新」按钮自动维护。
  • 用处:点绿字「更新」自动检测云端新版本 → 下载 → 内存解压 → 重建该目录 → 自动刷新插件,全程零人工;成功后会自动清理浏览器下载记录里的散装条目(只删记录、不删文件)。
  • 若弹出「文件可能损害设备」的拦截横幅,点「放行并继续更新」即可(Edge 对 .js 的内建拦截,属正常现象)。

7.3 重名自动加后缀

  • 重名文件夹(1)(默认):同名文件夹不覆盖,另建带序号的文件夹(编号(1))。
  • 重名文档(1):同名文件不加新文件夹,改在文件名后加序号。
  • 用处:两种方式都永不覆盖已有文件,区别只在于「重复内容堆在哪一层」,按你的归档习惯选。

7.4 下载产品图方式

  • 独立按钮(默认):文档与产品图分开下,各自一个批量按钮。
  • 集成按钮:合成一个按钮,点一次先下文档再下产品图,适合「一次要齐」的批量作业。

7.5 下载产品图数量

  • 首张(默认):每个编号只下第 1 张图,不打包,文件名不带 _P序号——最省流量。
  • 全部:打包成 PIC_编号.zip,保留 _P序号——需要整套图时用。

7.6 显示产品图预览

  • 是(默认):结果卡片显示首张图缩略图,点击进灯箱。
  • 否:不加载缩略图(显示占位框或直接隐藏),检索更快、页面更清爽,需要看图时用灯箱外的单独下载入口。

7.7 解压 CAD 文件(STP)

  • 是(默认):zip 自动解压为散件逐个落盘,zip 本身不保留,可直接打开使用。
  • 否:原样保存 zip 包。解压失败时会自动回退保存原 zip,不会丢文件。

7.8 产品图纸识别规格编号的下载筛选

  • 开启(默认):只保留图框 SPEC 编号命中的产品规格,其余丢弃——规格最干净,适合只要配套规格。
  • 关闭:产品规格不做筛选、全部保留——适合不确定图框是否可信,想全都要。

7.9 产品图纸识别规格编号的触发时机

  • 检索文档(默认):检索时就自查图框编号,结果里直接能看到规格——早知道、好判断。
  • 下载全部文档:点下载时才查,只影响最终下载内容,检索更快。

7.10 产品图纸语言版本筛选

  • 优先英文 / 优先德语 / 优先日语 / 全部:同一料号挂多张图纸时显示哪一版。
  • 仅 1 张图纸时不筛选直接显示;识别图框用的目标图纸恒优先取英文版,不受此项影响。

7.11 产品规格语言版本筛选

  • 优先英文(默认)/ 优先德语 / 优先日语 / 全部:同上逻辑,作用于「产品规格」文档。
  • 仅 1 份规格时直出不筛;所选语言一份都没命中时全部保留兜底,不会给你一个空列表。

8已知边界与排查
  • 图纸读不出规格编号:多为扫描件或「文字转矢量轮廓」型 PDF(物理无文字层,任何版本都读不出),属硬限制——此时按 3.1 看淡红色提示并人工核对,不是插件故障。
  • 点「更新」提示网络失败:多为公司访客网/代理拦截更新站点(表现为跳转到拦截页),换手机热点即可,属环境问题非插件 bug。
  • 更新时被拦「文件可能损害设备」:Edge 对 .js 的内建拦截,点「放行并继续更新」;落盘文件带 MOTW 属正常。
  • 下载一直卡在某组:点「终止下载」保留已下载内容,然后重下(不支持续传,重名自动加后缀)。
  • 插件窗口上限 800×600;弹窗收起不会中断检索结果缓存(本次会话内有效,关闭浏览器即失效)。

9常见问题速查

按「现象 → 原因 → 怎么办」归类,覆盖使用中最常被问到的问题(★ V0.6.13 起说明书已云端化,本页即唯一入口);部署步骤见「03 部署插件说明」。

9.1 安装、图标与启动

  • 菜单里找不到图标:点工具栏的拼图图标(扩展程序)在弹出的列表里找,或用图钉钉到工具栏。
  • 图标显示成灰色的「T」:浏览器缓存,关掉浏览器重开一次即恢复橙色 TE。
  • 启动时弹「无法加载该扩展…清单文件丢失或不可读取」:加载目录里的 manifest.json 被移动/删除或层级不对,按 1.1 保证 7 项文件原样同在,重新加载。
  • 弹「已请求其他权限」:正常。文档编号检索需要「读取标签页」和「在网页中执行脚本」(仅用于 te.com.cn),点接受即可。
  • 打开弹窗出现一个白色方块:那是「未发现产品图」的占位框(浅灰虚线框 + 居中文字),不是显示错误;可在设置里关掉「显示产品图预览」。

9.2 检索与结果

  • 二次检索为什么又快了一大截(V0.6.14 起):文档编号检索改为直调官网检索接口(api.te.com.cn/api/v1/documents/metadata),不再开后台标签页、不等页面渲染、不注入脚本——一个编号一次 HTTP 请求,毫秒级返回;该接口访客态即可用(无需登录)。若接口失效会自动降级回原页面通道,结果与老版本完全一致,只是慢一些
  • 二次检索为什么快了(V0.6.12 起):整个检索会话只开 1 个隐藏官网搜索页反复复用——原先每个编号都新开一页、搜完即关,批量大时肉眼可见标签页逐个冒出;等待上限也大幅收紧(25s→6s、轮询 500→250ms),同一编号一轮只做一次二次检索,批次结束自动关闭共享页。批量越大提速越明显
  • 点下载没反应:看浏览器底部是否弹「是否允许下载多个文件」,点允许;文件在 下载\TE Web Download\<编号>\。
  • 提示「产品页请求失败 / 未找到文档」:多为编号输错,或该编号在官网上确实没有该类型文档;产品图纸与产品规格是两类文档,有些编号只有规格没有图纸,属正常。
  • 文档编号检索一直转圈 / 提示未找到搜索框:多半是网络慢、官网页面没加载完,稍后重试;仍失败则手动打开官网确认可访问。
  • HTTP 404 会自动重试吗:会。按料号通道失败后会自动再走文档编号通道兜底一次。
  • 关掉弹窗再打开上次的结果还在:这是缓存设计(本次浏览器会话内有效)。点「清空」才会真正清掉;恢复结果时你的本次输入永远优先,不会被覆盖。
  • 明明选了「重名文件夹」却按「重名文档」执行:早期时序竞争问题已根治;若再出现,按 2.5 排查其他下载类扩展抢文件名。

9.3 归档、重名与文件夹

  • 文件没进编号文件夹、直接落在下载根目录:多被其他下载类扩展拦截了文件名(详见 2.5)。
  • 同一编号被拆成 编号、编号 (1)、编号 (2):同名文件夹策略下正常;想避免可在设置里改为「重名文档(1)」。
  • 按钮上的「组」是什么意思:按产品编号计的组数(一个编号的所有文档算一组)。按钮字样会随进度实时变化:正在下载文档 17/91 组 + 图片 0/91 组。

9.4 产品图与预览

  • 压缩包里为什么是 编号_P1、编号_P2:打包时按顺序连续编号;设为「首张」则文件名不带 _P 序号。
  • 有的编号显示「未发现产品图」:该料号官网确实没图;若官网用的是「共享图库图」插件会兜底取 1 张,但受原图限制最大 200×114(预览下载可用,灯箱不升高清)。
  • 「下载全部产品图」按钮不出现 / 变灰:当前结果里没有任何产品图;批量按钮还会在全部成功后冻结为「已完成(N/N)」,点「清空」恢复。
  • 缩略图空白 / 不见了:先确认设置里「显示产品图预览」为「是」;关闭预览时缩略图与占位框会一并隐藏。
  • 点缩略图不再直接打包 ZIP:现在点缩略图是打开灯箱看全图,灯箱内可左右切换(键盘 ←/→)、下载当前这张或打包全部。
  • 只有第 1 张清晰、第 2 张发虚:已修复——专属 DAM 图现可升到高清;只有共享图库兜底图受官网原图限制不会升高清。

9.5 图框识别与规格

  • 没下载到本地也能读图框?:能。插件走内存解析 PDF 文字层,检索之后、下载之前就读右下角图框里印的 PRODUCT SPEC / APPLICATION SPEC。
  • 为什么一个规格都没被过滤掉:说明没从图框读出编号,插件会全部保留并提示,绝不硬筛。多为扫描件 / 文字转矢量轮廓(物理无文字层)的硬限制,请人工核对。
  • 多份图纸为什么有的识别不到:会按 英文→中文→德语→日语→最后一张依次尝试目标图纸,并对 TIF 做兜底;全失败才提示并显示全部语言版本。
  • 为什么有时显示「全部语言版本」还带黄底提示:说明回退到兜底展示,请人工核对规格。

9.6 CAD 与文件

  • CAD 下载下来是 zip 压缩包,能自动解压吗:设置里「CAD文件解压」勾选该格式时(默认勾 STP,可全开 / 全关)自动解压为散件逐个落盘(zip 本身不保留);失败会自动回退保存原 zip,不会丢文件。3D PDF 是普通 PDF,始终直接下载。
  • CAD 文件怎么按格式筛选 / 解压(V0.6.17 起):主勾选「CAD文件」是总开关;设置页「CAD文件筛选」勾选要下载的格式(3D_PDF / 2D_DXF / 3D_IGS / 3D_STP,默认仅 3D_STP,STP 随主勾选锁定常开,主勾选关闭 = 不下载任何 CAD);「CAD文件解压」勾选的 zip 格式(DXF / IGS / STP,默认仅 STP,可全开 / 全关)下载时自动解压成散件逐个落盘,失败自动回退原 zip;3D PDF 是普通 PDF,始终直接下载

9.7 更新与设置

  • 为什么图框识别失败(没认出产品规格编号)还按语言筛选了(V0.6.15 起):旧版在「图纸图框读不出 PRODUCT/APPLICATION SPEC」时会整组放行全部语言版本;V0.6.15 起改为与正常识别一致按「产品图纸语言 / 产品规格语言」筛选——只是此时非目标语言版本会被筛掉(筛选函数有「0 命中全保留」安全阀,不会出现空列表)。想核对全部语言版本,把对应设置切到「全部」即可。文档编号通道(108-/114-/501-/411-)始终不筛选
  • 下载的文档文件名为什么更规范了(V0.6.14 起):直调接口直接给出官网权威文件名(如 ENG_SS_114-18025_Y1.pdf),替代过去从下载链接里猜文件名的做法——链接里的 DocNm 参数其实是文档编号,猜出来会是「编号.pdf」,现已修正为「权威文件名优先」
  • 为什么 V0.6.14 的检索有时还是老速度:那是降级通道在兜底(直调失败时自动回退页面注入)。若持续触发,多半是网络/公司网关拦截了 api.te.com.cn 域名——换网络(如手机热点)即可恢复毫秒级;连续失败时打开开发者工具 Console 能看到 [v0.6.14] 文档编号 API 直调失败,降级页面注入 提示
  • 设置页那三行说明文字去哪了:V0.6.12 做了界面减法,删掉了规格下载筛选 / 图纸语言筛选 / 规格语言筛选下方的三行灰字提示——功能、选项、默认值完全不变,完整说明见「使用策略」5.3 与第 7 章
  • 「产品规格语言版本筛选」为什么改成「优先英文」:仅统一措辞,与「产品图纸语言版本筛选」的「优先英文」保持一致,行为与默认值(优先英文)不变
  • 「更新」的提示信息显示在哪:点「更新」后进度与结果直接显示在设置页「插件更新路径」下方那一行(覆盖「只读 · 由「更新」按钮自动维护」),顶部不再弹更新横幅;再次点「设置」按钮即恢复默认文案
  • 插件包里怎么没有部署说明书.txt 了:V0.6.13 起说明书内容全部云端化——部署步骤见「03 部署插件说明」,常见问题见本页第 9 章;老版本包内仍保留该 txt
  • 「更新」按钮去哪了:现在在弹窗标题行的版本号右侧,显示为与版本号同色的纯文字「更新」,点击行为不变。
  • 为什么之前更新会卡住:v0.6.4 已把完成判定改为事件 + 轮询 + 数据落盘三通道,.js 文件提前写入,并加了超时重试与明确的人工排查提示。
  • 更新失败提示为什么变了:v0.6.7 起网络被拦截时给出可行动的中文诊断(换热点、排查扩展、换浏览器),不再只报原始英文错误。
  • 更新会不会丢之前的勾选:不会,所有偏好存在浏览器本地;重名模式、产品图方式、预览开关均点选即生效,不必等存盘。
  • 「优先日语」怎么用:设置里「产品图纸语言版本筛选」选优先日语,同一料号挂多张图纸时只显示日语版;仅 1 张不筛,无日语版时全部显示兜底。
  • 按钮文字为什么带括号数字:那是「组」的计数(如「下载全部文档(91 组)」),会随选中内容实时变化,不是报错。
  • 弹窗能调大吗:受浏览器限制,上限 800×600;放大页的左右切换按钮已修复不会跑出窗口。

05更新记录

点击任意版本行可展开 / 收起该版明细
V0.6.192026-10-15最新⬇️ 单文件下载后台化(自动重试)+ 中断可点击重试 + 全新琥珀斜体图标
  • ⬇️ 方案 C:单文件下载后台化:单个文档下载(图纸 / 规格 / CAD 直下)改由后台 service worker 执行(消息 dl-one-file),弹窗关闭 / 收起不再丢失下载状态;网络类中断(NETWORK_FAILED / SERVER_BAD_CONTENT 等)自动重试,最多 3 次;状态写入 te_single_dl,弹窗重开自动恢复显示
  • 🔁 中断提示更友好:「下载中断」改为「下载中断,可点击重试」,下载按钮保持可点,点「下载」即重发同一文件
  • 🎨 全新图标:琥珀底(#F08A00,与 TE 官网标签页同饱和度)+ 斜体 TE + 直角边;16px 小尺寸自动切正体粗体保证清晰(修复「马赛克」观感);本站 hero / 导航徽标与 APK 站已同步更换
  • 验证:verify_v054.js 708 通过 / 0 失败(新增 dl-one-file 路由、自动重试、te_single_dl 订阅、中断文案等 7 项断言)
V0.6.182026-10-15🧹 移除已撤回的历史记录面板(恢复「最近检索」形态),CAD 多格式能力保留
  • 🧹 移除「历史记录」面板(v0.6.16 废弃方案):v0.6.16 撤回时仅从云端下架,其源码仍留在代码基线中,导致 v0.6.17 构建时被一并带入(用户实测反馈)。v0.6.18 将面板(折叠头 / 检索·下载双 tab / 删除分裂按钮 / 下载历史记录与后台统计)整体移除,恢复 v0.6.15 的「最近检索」形态:空列表时整块隐藏,点编号按「覆盖 / 叠加」设置回填输入框
  • ⚙ 设置不受影响:「覆盖 / 叠加」写入方式回到「最近检索」标题右侧(此前一度被移入面板内部);v0.6.17 的 CAD 多格式筛选、CAD文件解压、规格全丢保护阀全部保留,行为不变
  • 🗄 旧数据说明:v0.6.17 期间写入的下载历史记录随面板移除不再展示;已下载到磁盘的文件不受任何影响
  • 验证:verify_v054.js 697 通过 / 0 失败(含「面板已移除 + 最近检索恢复 + 后台统计清零」6 项反断言);与 v0.6.15 的 popup.css 逐字节一致、background.js 整体还原
V0.6.172026-10-15🗂 CAD 多格式(STP/IGS/DXF/3D PDF)筛选与按格式解压 + 规格全丢保护阀
  • 🗂 CAD 文件升级为多格式(STP / IGS / DXF / 3D PDF):主勾选改为「CAD文件」总开关,不再写死只认 3D_STP;设置页新增「CAD文件筛选」四种格式按需勾选(默认仅 3D_STP,与旧版行为一致)。其中 3D PDF 是官网「3D PDF」可视化模型(普通 PDF),IGS / DXF 与 STP 同为 zip 包
  • 🔒 STP 锁定常开 + 主勾选联动:主勾选开着时 STP 勾选锁定(禁止取消,唯一关闭方式 = 关掉主勾选);IGS / DXF / PDF 为增量自由勾选;主勾选关闭时四个格式全部置灰清空,下载清单不含任何 CAD。旧设置自动迁移(v0.6.16 及以前勾没勾 CAD 原样保留)
  • 📦 「解压CAD文件STP」升级为「CAD文件解压」(按格式勾选):DXF / IGS / STP 三个勾选(默认仅 STP,支持全开 / 全关),勾选的格式下载时自动解压成散件逐个落盘(zip 本身不保留),失败自动回退保存原 zip;3D PDF 是普通 PDF,始终直接下载
  • 🏷 卡片徽章带格式后缀:CAD文件(STP) / (IGS) / (DXF) / (3D PDF),同一产品的多份 CAD 一眼区分
  • 🛡 规格全丢保护阀(修复 1-1563845-1):「图纸编号」过滤模式下,图框识别到的规格号与产品页规格全部对不上时不再丢弃——产品页规格是官网权威挂载,图框(可能是家族通用图纸)引用的规格可以完全不同源;此时保留全部规格并在状态栏明示,与语言筛选「0 命中全保留」安全阀同一哲学。部分命中维持原语义(未命中仍丢弃)
  • 🧹 扩展管理页描述精简:提示文案去掉 (.3d_stp.zip),与多格式现状一致
  • 验证:verify_v054.js 700 通过 / 0 失败(新增 CAD 筛选 / 解压 / 联动与全丢保护阀断言)+ test_hist_v0616.js 32/32;tecore 单测覆盖四格式识别与过滤口径
V0.6.162026-10-13已撤回⚠ 本版已撤回,请停留在 V0.6.15
  • ⚠ 本版(V0.6.16)已撤回,请停留在 V0.6.15:该版本引入「历史记录」面板后出现未预期问题,已从云端下架并撤回。最新版已回到 V0.6.15——如果你已经更新到 0.6.16,点「更新」按钮不会自动降级(更新机制只升不降),请到「历史版本」下载 V0.6.15 包,解压后按同样方式重新加载即可回退。下方条目仅作撤回记录保留,不作为现行版本参考
  • 🕘 新增「历史记录」面板(弹窗底部,默认折叠只占一行):面板含两个标签页——左侧「检索历史」是你检索过的编号,点一下按「覆盖 / 叠加」设置回填输入框;右侧「下载历史」是已下载的编号,右侧显示「文档 N · 图 M」与时间。旧版的「最近检索」已升级为该面板的检索历史页
  • 📂 点下载编号直达文件夹:「下载历史」里点某个编号,资源管理器会直接打开该编号的下载文件夹(下载\<保存路径>\<编号>\),省去逐层翻目录。若文件已被你手动删除或移动、或浏览器清理了下载记录,会温和提示并给出保存路径,不会报错
  • 🔁 同一编号只保留一条:检索侧——同一编号检索多次只显示一条,每次检索把它顶到最前并刷新时间;下载侧——同一编号分多次下载也只保留一条,文档与图片数按次累加(文件本来就下载到同一个文件夹里)
  • 🗑 删除按钮双合一:面板右上角「删除」点一次分裂为「检索」「下载」两个拼接按钮,点哪个就清空哪一类历史;3 秒内不点会自动复原为单个「删除」按钮(防误触)。两个标签页的历史彼此独立,互不影响。旁边另有「刷新」可重新读取历史
  • 验证:新增 test_hist_v0616.js(32 项,jsdom 跑真实页面 + 假桥,覆盖去重累加 / tab 切换 / 删除分裂与 3 秒复原 / 跳转文件夹命中与文件缺失两种分支),全部 32 通过;verify_v054.js 664 通过 / 0 失败(并把 8 项历史面板断言纳入长期回归套件)
V0.6.152026-10-13🔧 语言筛选三入口口径统一(识别失败也筛选)+ drawingLangOf 从链接解析 DocLang 兜底
  • 🔧 语言筛选三入口口径统一(检索 / 下载全部文档 / 恢复上次检索):此前图框识别失败(读不出 PRODUCT/APPLICATION SPEC)会整组跳过图纸与规格语言筛选、「下载全部文档」对识别失败红组也豁免规格筛选、恢复上次检索按旧偏好快照重绘——三处行为不一致。现统一为图纸与规格语言筛选照常生效,靠筛选函数内置「≤1 份不筛 / 0 命中全保留 / 永不筛空」安全阀,识别失败时非目标语言版本会被筛掉但不会出现空列表
  • 🛡 图框识别失败不再豁免筛选(主修复):输入带图纸的编号(如 7-1452668-3)时,若图纸图框未识别出任何产品规格编号,此前会放行全部语言版本;现与正常识别一致按「优先英文/德文/日文」筛选——想要看全部语言版本,把设置切到「全部」即可
  • 🔍 drawingLangOf 新增 DocLang 兜底:语言判定除原有 language 字段与 ENG_/GER_/JPN_ 文件名前缀外,新增从文档链接 DocLang 参数解析(English→en / German→de / Japanese→ja),消除补全规格 / 二次检索文档因语言字段被文档类型污染而漏检或静默误杀的问题
  • 📌 范围说明(不变):文档编号通道(108-/114-/501-/411-)与产品图纸/产品规格以外的文档类型仍不进入语言筛选(以点名要某份资料,版本取舍交给你),详见使用策略 §2.1 / §5.3
  • 验证:re-bundle 内联校验通过(node --check + tecore 单元测试含 DocLang 兜底),打包 10 文件结构(与历史版本一致),站点全 URL 200 + 首页断言(步骤 ⑤)
V0.6.142026-10-13⚡ 二次检索改走官网 API 直调(毫秒级、访客态可用)+ 失败自动降级原页面通道(双保险)
  • ⚡ 二次检索改走官网 API 直调(单编号毫秒级):输入 108-/114-/501-/411- 开头的文档编号时,不再开后台标签页打开官网搜索页、不等 Angular 渲染、不注入脚本模拟点击——改为直接请求官网检索接口 api.te.com.cn/api/v1/documents/metadata(访客态即可用,无需登录态)。一个编号从原来的 1~3 秒降到毫秒级,批量越大提速越明显;同时彻底消除「后台标签页被浏览器节流」这一类隐患
  • 🛡 双保险:失败自动降级:直调一旦失败(网络错误 / 非 200 / 响应结构不符),自动回退到原来的页面注入通道,并输出 console.warn 便于排查——即使官网接口改版,检索也不会瘫;v0.6.12 的「共享标签页池化」代码作为兜底完整保留
  • 📄 文档命名更规范:新通道直接使用官网返回的权威文件名(如 ENG_SS_114-18025_Y1.pdf),不再退化为「编号.pdf」——实测发现下载链接里的 DocNm 参数是文档编号而非文件名,老逻辑在新通道会命名错,已修正为「filename 优先、DocNm 兜底」
  • 🔑 权限:manifest 新增 api.te.com.cn 域名授权(此前只有 www.te.com.cn,直调会被浏览器拦截);tabs / scripting 继续保留(降级通道需要)
  • 验证:verify_v054.js 扩到 655 项(新增第 30 章 21 项:API 直调源码/行为、零标签页、空数组不降级、网络失败与 HTTP 503 双重降级、filename 权威命名),全套 655 通过 / 0 失败
V0.6.132026-10-13⭐ 更新提示改到「只读…」行 + 灯箱高清加载提示 + 部署说明书下线(内容全部云端化)+ 版本明细版本号联动
  • ⭐ 更新提示改到「只读…」这一行(不再借用状态行、顶部横幅退役):点「更新」后,进度与结果(成功绿 / 警告琥珀 / 失败红)直接覆盖设置页「插件更新路径」下的「只读 · 由「更新」按钮自动维护」,提示与入口同位;弹窗顶部原来的更新结果横幅已移除,不再挤压正文;再次点「设置」按钮即恢复默认文案。红底「已覆盖写入 N 个文件」属安全审计记录,保持原位不动
  • ⭐ 灯箱高清加载提示:点缩略图打开大图时,底栏显示「正在加载高清产品图…」;高清换图成功后显示「高清产品图已加载成功」;加载失败静默(保持原有兜底,继续显示已上屏的图);切换图片 / 关闭灯箱即清空。共享图库兜底图没有高清版,不显示提示
  • 📘 部署说明书.txt 下线(内容全部云端化):部署步骤见「03 部署插件说明」,常见问题见「使用策略」第 9 章——新版本不再随包分发该 txt(老版本包内保留);此后新增 FAQ(Q44/Q45…)一律提炼后直接写入站点,不再维护说明书文件
  • 📘 补 Q43 上网(V0.6.12 遗漏):把「二次检索为什么快了」补进使用策略 9.2、「设置页那三行说明去哪了」补进 9.7,并在 V0.6.12 记录补上历版惯例的说明书 bullet;此前网上查不到 Q43 的原因即为「只写了说明书、没提炼上网」
  • 🔧 使用策略「版本明细」小节的当前版本号停更 bug 修复:该标题里的「当前 V…」此前不由发版脚本联动(脚本只改 hero / 下载按钮 / 版本卡),V0.6.12 发版后仍停在 V0.6.11;现已纳入发版脚本,并加整页校验(必须恰好 2 处、不得残留旧号)
  • ✏️ 文案统一:「产品规格语言版本筛选」的英语选项由「优先英语」改为「优先英文」,与「产品图纸语言版本筛选」措辞一致(行为与默认值不变)
  • 验证:verify_v054.js 扩到 634 项(新增第 29 章 34 项:更新提示改道源码/行为、一次性消息只显示一次、灯箱高清提示三态、说明书下线、文案统一),全套 634 通过 / 0 失败;功能文件 10 项(说明书下线后为 9 个功能文件 + icons 4 张)
V0.6.122026-10-12🔴 全量审计修复:ZIP 空文件 / 更新按钮失效 / 下载卡死三大缺陷 + 二次检索大幅提速
  • 🔴 修复「下载产品图数量=全部」打出 0 字节空 ZIP 的致命 bug(【根因】zip 打包函数返回类型与后台消费端不匹配:Blob 无 length 属性,拼包循环一次都不执行;【修复】统一返回字节数组并加入参类型断言防复发。此前版本如打出的 PIC_编号.ZIP 是空文件,请重新下载)
  • 🔴 修复「更新」按钮可能永久失效的 bug(【根因】更新重试路径先清空兜底轮询再重启下载,重试后轮询未重建,下载失去全部兜底导致等待永不结束;【修复】轮询抽成可重启函数,每次重试后自动重建)
  • 🔴 修复长批次下载中后台进程被浏览器回收后、弹窗永久卡在「正在下载」的 bug(新增后台启动对账:发现上次任务未写终态即补写「已中断」错误帧,弹窗据此复位按钮,不再死锁)
  • ⚡ 二次检索大幅提速(方案 A+D):整个检索会话只开 1 个隐藏官网搜索页反复复用——原先每个编号都新开一页、搜完即关,N 个编号要完整加载 N 次官网单页应用(肉眼可见标签页逐个冒出);等待轮询间隔 500→250ms、结果等待上限 25s→6s;同一编号一轮只做一次二次检索(不再重复触发);批次结束自动关闭共享页,不留常驻标签。批量越大提速越明显(详见使用策略)
  • ⚡「下载全部」文件夹解析改为并发:原先串行逐个探测、每个编号 ≥2.8s,20 个编号要先干等约 1 分钟才开始下载,现并发执行
  • 更新/下载网络请求增加超时(20s/30s):网络挂起不再永久等待,超时给出可行动的中文提示
  • 设置页界面减法:删除三处说明文字(规格下载筛选、图纸语言筛选、规格语言筛选下方的灰字提示)——功能、选项、默认值完全不变,完整说明见「使用策略」5.3 与第 7 章;更新路径备注字色/字号与上方提示一致;右上「设置」按钮改为橙底白字圆角矩形(与「检索文档」同款形态)
  • 全量代码审计:5667 行全量只读审计(见「审计报告」板块 v0.6.11 报告),共发现问题 46 条(阻断 3 / 严重 16 / 一般 22 / 轻微 5),本版修复全部阻断级与高优先级问题
  • 部署说明书:升 V0.6.12 + 新增 Q43(二次检索提速 / 设置页三行说明去哪了 / 产品图 ZIP 修复)——V0.6.13 起说明书下线,Q43 内容已提炼进「使用策略」9.2 与 9.7
V0.6.112026-10-12🔴 修复致命 bug:下载文档较多时,中途隐藏弹窗再重开会中断下载
  • 🔴 修复致命 bug:下载文档较多时,中途隐藏弹窗再重开会中断下载
  • 【根因定位】批量下载的编排逻辑(逐份入队下载、CAD 解压的 fetch、产品图打包循环)此前全部运行在弹窗自己的 JS 上下文里——弹窗一收起,该上下文即被浏览器销毁:剩余下载队列不再入队、CAD 解压请求被中止、进度监听全部丢失,表现为「重新打开后下载中断」
  • 【修复:下载编排迁入后台 service worker(方案A)】点「下载」时任务清单一次性移交后台常驻引擎;后台负责逐组下载文档 → 处理产品图 → CAD 解压 → 打包 ZIP(数据经 data URL 落盘),期间 20s 心跳保活;进度实时写入 chrome.storage,弹窗订阅展示;「终止下载」经消息通道通知后台在文件之间安全停止。弹窗隐藏/关闭/重开均不再影响下载,重开弹窗还能看到实时进度「正在下载文档 N/M 组 + 图片 N/M 组」
  • 【zip 工具共享化】crc32/makeZip/parseZip 等抽为共享模块 zipcore.js,弹窗与后台共用同一实现,杜绝两份代码漂移
  • ★ 新增「产品规格语言版本筛选」:设置页「产品图纸语言版本筛选」下方新增,选项 优先英语(默认)/优先德语/优先日语/全部。作用对象是「产品规格」类文档:仅 1 份规格时直出不筛选;多份时按所选语言筛选;筛选后无任何命中时全部保留兜底。「下载筛选」「触发时机」两个开关对它同样生效
  • ★ 产品编号标题三色态:淡红=存在未成功识别图框规格(建议手动核对);淡绿=成功识别图框规格号且检索到文档;淡黄=成功识别但未检索到文档(原色)。完整规则见「使用策略」
  • ★ 检索可暂停、断点续跑:检索中「清空」→「取消」→双击确认(3 秒回退)→暂停检索(安全断点在编号之间,识别中途不打断);「检索文档」变「继续检索文档」,点击从断点继续;断点已持久化,重开弹窗可恢复;完成后恢复「清空」并丢弃断点。「清空」也升级双击确认防误触
  • ★ 下载进度与终止下载:批量下载按钮实时显示「正在下载文档 N/M 组 + 图片 N/M 组」;下载中「清空」→「终止下载」→双击确认(字样「确认终止 无法恢复」)→已下载的全部保留、未下载的不再下载、不支持续传
  • 设置页文案/布局优化:图纸规格筛选说明精简为「开启=只保留图框SPEC编号命中的产品规格; 关闭=产品规格不做筛选全部保留」并移到「下载筛选」行下方;删「(详见说明书 QA)」;「只读 · 由「更新」按钮自动维护」另起一行(去括号、字体与正文一致);重名文案改为「重名自动加后缀:重名文件夹(1) 重名文档(1)」(仅文字,逻辑不变);「更新」按钮移到设置页「插件更新路径」行右侧(绿字,仿「修改」按钮风格)
  • 边界与前提:图框识别(读 PDF 文字层)中途不打断,取消总在编号之间生效;「终止下载」保留已下载文件,重下会从头开始(重名自动加后缀);三色态与语言筛选只影响显示与筛选,不改变下载/归档逻辑
  • 部署说明书:升 V0.6.11 + 新增 Q41(三色态规则 / 产品规格语言版本筛选)、Q42(暂停续跑与终止下载边界)
  • 验证:verify_v054.js 扩到 581 项(新增第 27 章约 77 项:后台下载引擎组计数/归档/终态帧、abort 确定性注入、消息通道忙拒/状态查询、进度订阅 UI、双击确认 3 秒回退、检索暂停续跑真实调用链、三色态渲染、规格语言筛选行为等),全套 581 通过 / 0 失败;zip 11 条目(含新共享模块 zipcore.js)、预置更新目录 11 文件
V0.6.102026-10-12★ 四项调整(用户反馈:更新按钮位置与样式 / 新增日语筛选 / 提示文案精简)
  • ★ 四项调整(用户反馈:更新按钮位置与样式 / 新增日语筛选 / 提示文案精简)
  • 【「更新」按钮移到版本号右侧】从「设置」上方移到弹窗标题行版本号(V0.6.10)右侧:显示为与版本号同色的纯文字「更新」(取消按钮形态——无底色/圆角/内边距,悬停下划线),点击行为完全不变(就地更新全链路一致);「设置」恢复独占右上角,不再被挤到靠下位置
  • 【版本号大写 V】弹窗标题与下载网站的版本号统一显示为大写 V(如 V0.6.10);下载文件名保持原样不受影响
  • 【新增「优先日语」】设置页「产品图纸语言版本筛选」在「优先德语」右侧新增「优先日语」:同一料号挂多张 PDF 图纸时只显示日语版(仅 1 张时不筛选;无日语版时全部显示兜底)。识别目标图纸恒按 英文→中文→德语→日语→最后一张 优先级依次尝试(任何时候优先英文),与显示筛选互不影响;日语图纸按 DocLang=Japanese 或文件名 JPN_ 前缀识别
  • 【提示文案精简】① 设置页「产品图纸语言版本筛选」下方说明不再带「(英文→中文→德语→最后一张)」;② 图框未识别到编号的告警不再带「原因:已依次尝试 PDF 图纸(英文→中文→德语→最后一张),均未能从图框文字层读出编号(可能该图纸是扫描件/矢量件无文字层,或该版本图框本就没印编号)」整段。识别机制完全不变:失败时仍自动回退显示全部语言版本图纸并建议手动核对;原因说明移至说明书 Q40
  • 前提与边界:优先日语只影响「显示筛选」与「识别尝试顺序」,不改变任何下载/归档逻辑;提示精简仅删展示文案,buildSpecNoHitMsg 的兜底清单(产品页已有规格)与「显示全部语言版本」指引全部保留
  • 部署说明书:升 V0.6.10 + 新增 Q40(更新按钮新位置 / 优先日语用法 / 文案精简说明与常见失败原因)
  • 验证:verify_v054.js 扩到 504 项(新增第 26 章:更新按钮位置与纯文字样式、大写 V、日语归类与优先级行为测试、文案精简断言),全套 504 通过 / 0 失败;zip 10 条目、预置更新目录 10 文件
V0.6.92026-10-12★ 更新体验四项(用户痛点:下载列表堆积 11 个散装更新文件 + 横幅排版杂乱)
V0.6.82026-10-12
  • ★ 更新体验四项(用户痛点:下载列表堆积 11 个散装更新文件 + 横幅排版杂乱)
  • 【散装文件根因】就地更新是内存解压后逐文件落盘到 下载/TE AGENT UPDATE/current/extension/,每个文件在浏览器「下载内容」(Ctrl+J) 各留一条记录 → 11 个散装条目。V0.6.8 修复:全部落盘成功后自动 chrome.downloads.erase 清理本批记录——erase 只删历史记录、不删磁盘文件,更新目录完好、下次更新照常全自动;感叹号待确认(被拦 .js)绝不清理(否则无法再点「保留」会丢文件),成功落盘后下次更新才纳入清理
  • 【感叹号为什么提示】Edge/Chrome 内建按文件类型做安全确认,.js 属重点盯防脚本类型:下载停在「待确认」、文件并未落盘,需点「保留」或弹窗内「放行并继续更新」(V0.6.5 一键放行)才写入——浏览器行为,与插件无关
  • 【覆盖横幅结构化美化】原 11 条完整路径挤一行 → 分区排版:⚠ 已覆盖写入 N 个文件 → 目录:下载/TE AGENT UPDATE/current/extension/(只显示一次)→ 文件按写入顺序逐行、相同后缀合一行(background.js / popup.js 一行、4 个 icon 一行)→ 「知道了,清除提示」按钮移到列表尾部右对齐(行高不变);N 为实际写入数,动态不写死
  • 【打开下载文件夹(精准定位+零残留)】横幅新增「点击此处打开下载文件夹」:借助暂留的最后一条下载记录 chrome.downloads.show(id) 让资源管理器直接打开 extension 更新目录并选中文件,打开后该记录随即 erase——既有「选B的精准」又「零残留」;暂留条目三处兜底清除(打开消费/点「知道了」/下次更新启动);无暂留记录时回退打开「下载」根目录
  • 【更新包内容调整】按用户要求:审计报告*.md 不再打进更新包、不再写入更新目录(只保留在云端站点供查阅);部署说明书.txt 照常打进包并随更新自动替换;其余功能文件全部参与——动态黑名单实现,后续新增功能文件自动包含、数量不写死(当前 10 个 = 9 功能文件 + 说明书)
  • 【设置页新增只读「插件更新路径」】「默认保存路径」下方展示 下载/TE AGENT UPDATE/current/extension(由「更新」按钮自动维护);不做编辑入口——编辑会牵动后台覆盖白名单与防干涉校验等多处安全设施,暂不开放。更新成功文案改为「✅ 已成功更新插件到 vX.Y.Z(更新目录:…)」
  • 部署说明书:升 V0.6.8 + 新增 Q38(散装文件来历/感叹号原理/erase 影响/横幅排版/打开文件夹原理)
  • 验证:verify_v054.js 扩到 486 项(新增第 24 章 17 项:横幅结构化断言、show+erase 零残留行为测试、erase 只清前 N-1 条、审计报告过滤行为测试、设置页只读展示),全套 486 通过 / 0 失败;zip 10 条目不含审计报告、预置更新目录 10 文件
V0.6.72026-10-12★ 四组修复(2 个 bug 根因 + 2 项界面调整),详见下方根因与边界说明
  • ★ 四组修复(2 个 bug 根因 + 2 项界面调整),详见下方根因与边界说明
  • 【根因① 修复:368083-1 类「无可用文档」识别战果无处安放】现象:受限/停产产品(官网文档页「无可用文档」)二次检索能找到产品图纸,但卡片无任何规格徽章。实机定位:识别其实已执行且能读出图框编号(C−368083 → PRODUCT SPEC 108-61021 / APPLICATION SPEC 114-61004),但默认「下载筛选=开启」模式只对本次结果里已有的产品规格做过滤——产品页一条规格都没有时过滤无对象,战果无处挂徽章。修复:一条产品规格都没有时自动退化为补全——按命中编号走官网「按文档编号搜索」检索产品规格(只取 PDF)、挂徽章、归档进本产品编号文件夹;有规格时过滤语义完全不变(仍只保留命中的)
  • 【根因② 修复:检索失败兜底分支从未接识别】v0.5.7 的「检索失败→二次检索」catch 分支只把结果直接渲染,从未接入 V0.6.0 的图框识别与语言筛选。现已抽出公共后处理函数(语言筛选 + 图框识别 + specDone 标记),主通道与兜底分支完全共用、行为对称;附带修复识别命中但保留/补全/丢弃全 0 时状态栏的空括号「()」
  • 【根因① 前提】需同时满足:① 结果类型勾选「产品规格」;② 触发时机 = 检索文档(默认);③ 目标图纸 PDF 有可读文字层(扫描件/文字转曲读不出时按 英文→中文→德语→最后一张 换图、再试 TIF 兜底,全部失败则如实提示并显示全部语言版本)
  • 【根因① 边界】补全是拿图框编号去官网文档编号通道再查:查得到→补全挂徽章;查不到→静默跳过该编号(不报错、不影响其它编号)。识别用图纸恒按 英文→中文→德语→最后一张 取用,不受「产品图纸语言版本筛选」显示设置影响;补全规格的副标题显示官网文档类型(与产品页直出规格略有差异,属正常)
  • 【更新失败中文诊断】真机诊断实证:公司「GUEST 访客网」上网行为管理按域名拦截更新服务器(HTTP 302 跳阻断页、HTTPS 劫持成伪造自签证书——假 VeriSign、100 年有效期),证书校验失败 → 生硬的「Failed to fetch」。现翻译为「网络请求失败(阶段):网络可能拦截了更新服务器(常见于公司访客网/上网行为管理),请切换网络(如手机热点)后再次点击『更新』重试」;HTTP 异常标注阶段与状态码。站点本身无改动(平台侧实测正常)
  • 【全部下载按钮恒显示】V0.6.6 移入标题行时误带「多文档才渲染」条件,单文档卡片按钮消失;现恒渲染——1 份也显示「全部下载(1 份)」,格式与多文档一致,下载逻辑不变
  • 【检索状态栏恢复中性底色】该区域 = #status 检索状态栏(popup.css .status 类,setStatus 按 ok/warn/err 三态变色,维护说明已写入 popup.css 注释)。移除 V0.6.2 的黄底(#fff7e6)与橙色边框、恢复中性底色 #eef1f8,仅保留 .warn 暖棕文字色
  • 部署说明书:升 V0.6.7 + 新增 Q36(识别 bug 根因/修复/前提/边界)+ Q37(更新诊断/按钮/状态栏)
  • 验证:verify_v054.js 扩到 467 项(新增 19.12 零规格自动补全行为测试+对照组、第 23 章 16 项断言),全套 467 通过 / 0 失败
V0.6.62026-10-12★ 六项界面优化(用户截图标注,纯 UI 迭代,不碰下载/更新/识别逻辑)
  • ★ 六项界面优化(用户截图标注,纯 UI 迭代,不碰下载/更新/识别逻辑)
  • ① 图框识别徽章拆分重排:原「APPLICATION SPEC 114-18464」整枚徽章拆为规格编号(浅紫描边)+ SPEC 类型(紫底)两枚独立徽章,并从行右端移到「产品规格」类别徽章同一行右侧,顺序固定:产品规格 → 114-18464 → APPLICATION SPEC,三枚徽章行高一致,多命中依次排列
  • ② 「未发现产品图」占位框:从标题行下独立行移到标题行右侧、与产品图缩略图同尺寸同位置(52×40 浅灰虚线框、文字居中);有图/无图互斥渲染,不存在层叠干涉
  • ③ 「全部下载」按钮上移:从卡片底部移到产品编号标题行「有效」徽章右侧(紧凑小按钮,插在缩略图之前),批量下载逻辑(先决策文件夹、同编号合并)完全不变
  • ④ 标题行淡黄背景:产品编号首行整行 #fff8e1 + 圆角 + 内边距,多编号检索时快速区分卡片起始行
  • ⑤ 头部压缩:蓝色标题区内边距 12px → 6px、按钮间距/高度收紧,「更新 / 设置」按钮整体上移
  • ⑥ 设置页字号统一:正文与选项 11.5px、提示语 11px,不再混用四档字号
  • 部署说明书:升 V0.6.6 + 用途段新增特性 + 新增 Q35(六项改动逐一说明)
  • 验证:verify_v054.js 扩到 446 项(新增 22.1e 十项 UI 断言 + 第 19 章徽章拆分/顺序断言重写),全套 446 通过 / 0 失败
V0.6.52026-10-12★ 真机故障诊断(接管本地文件 + Edge 配置实证)
  • ★ 真机故障诊断(接管本地文件 + Edge 配置实证):用户真机点「更新」→ Edge 弹「background.js 可能会损害你的设备 是否保留」→ 点保留后又弹 Windows 安全警告,且更新不生效。诊断出两个叠加根因
  • 【根因1:Edge 内建拦截 .js 下载】注册表无任何策略 → 拦截是 Edge 内建默认行为(按文件类型对 .js 强制弹「保留/删除」确认,无论来源)。被拦下载停在"进行中"且不发完成事件;V0.6.4 的 45s 自动重试把「等用户确认」当「卡住」还会制造重复下载条目;而去下载面板点「保留」会关闭弹窗 → 更新流程中断(本次体验差的隐藏原因)
  • 【根因2:一次性迁移从未完成】Edge Secure Preferences 实证:插件实际从「下载\TE产品文档检索-latest-v0.6.3\」加载(另有 v0.5.9 残留注册项)——就地更新写入固定目录后自动刷新的仍是旧目录,版本永远不变 =「更新不生效」的真正原因
  • 【修复①:更新目录定名 TE AGENT UPDATE】(用户要求):popup.js 常量、background.js 白名单段、防干涉校验、文档全部同步
  • 【修复②:弹窗内一键放行】检出下载被拦(danger≠safe)→ 弹窗顶部亮红底横幅 + 「放行并继续更新」按钮,点击(用户手势内调 chrome.downloads.acceptDanger)即放行并自动续传——全程不离开弹窗;拦截期间绝不自动重试(不产生重复条目);真挂起重试前先 cancel 旧任务
  • 【修复③:迁移闭环】一次性迁移引导增加「打开扩展管理页」一键按钮(自动识别 edge://extensions / chrome://extensions);打包脚本新增预置本机更新目录(TE AGENT UPDATE/current/extension 整体重建),迁移时直接选目录即可、无需先下载 zip
  • Windows 安全警告说明:浏览器下载的文件都带 MOTW 标记,双击打开才弹,不影响扩展加载与运行,无需处理
  • 部署说明书:新增 Q34(双根因诊断结论 / 三项修复 / MOTW 说明)
  • 验证:verify_v054.js 扩到 433 项(新增 22.1d 共 8 项:目录定名、后台白名单同步、危险检出、危险态不重试、重试前 cancel、acceptDanger 入口、放行横幅 UI、迁移引导按钮),全套 433 通过 / 0 失败
V0.6.42026-10-12★ 界面迭代:「更新」按钮移到「设置」上方
  • ★ 界面迭代:「更新」按钮移到「设置」上方,两个按钮统一改为灰色底 + 橙色字(按钮形态参考「检索文档」)
  • ★ 设置页文案与分组调整:「产品规格与图纸识别」与「触发时机」归为一组(两行紧邻无缝隙,说明移到组尾)并改名——「产品图纸识别规格编号的下载筛选」:开启 / 关闭(原 图纸编号 / 追加显示);「产品图纸识别规格编号的触发时机」:检索文档 / 下载全部文档;「产品图纸语言」改名「产品图纸语言版本筛选」:优先英文 / 优先德语 / 全部。仅改名字与摆位,各选项功能与默认值不变
  • ★ 修复「更新」写 .js 文件挂起(V0.6.3 遗留问题,上轮排查修复):真机实测「更新」卡在「写入文件 1/11」——根因是浏览器把会话内已有前序下载之后又发起的 .js 下载拦为「待确认」(无完成事件、状态长期"进行中";.txt/.json/.css/.html/.png 均正常,手动链路写 .js 却成功)
  • 更新链路加固(四重保障):① 完成判定改三通道——事件 + 每 0.5 秒轮询 + 「已接收字节追平总字节(连续两拍)即视为落盘成功」;② 45 秒无结果自动重试一次(覆盖写入幂等),重试再失败才明确报错,绝不永久卡死;③ .js 文件提前写入(实测会话内第一次下载最稳);④ 失败提示引导用户打开「下载内容」(Ctrl+J) 检查被拦截的 .js 并点「保留」后重试
  • 部署说明书:新增 Q33(.js 挂起现象 / 四重保障 / 界面调整),并修正 Q32 中「端到端全通过」的不实表述为实际情况
  • 验证:verify_v054.js 扩到 425 项(新增 22.1b/22.1c 共 15 项:按钮位置与灰底橙字、.hdr-btns 纵向排列、分组无缝隙、新文案;数据落盘判定、自动重试、明确失败收口、.js 提前写入;两条行为测试验证「事件通道失效时仍能正确收口」且不误判成功),全套 425 通过 / 0 失败
V0.6.32026-10-12★ 新增「更新」按钮(就地更新,方案B)
  • ★ 新增「更新」按钮(就地更新,方案B):弹窗右上角「设置」左侧新增「更新」按钮。点击后自动检测云端最新版本号(download/latest/version.txt)并与当前版本做语义化比较:一致 → 提示「版本号已经是最新版本,请人工核验」;云端更低 → 提示无需更新;云端更高 → 自动下载更新包 → 内存解压 → 覆盖重建「下载\TE AGENT UPDATE\current\extension\」→ chrome.runtime.reload() 自动刷新,全程零人工
  • 【三条浏览器硬边界】(为什么"全自动"有上限,任何扩展都绕不过,Chromium/Edge 安全模型的刻意设计):① 无法程序化「加载解压缩的扩展」——必须人在扩展管理页点击并选文件夹(developerPrivate 只对浏览器内部页面开放);② 无法程序化固定/取消固定工具栏图标——无公开 API,仅企业策略(注册表,需管理员)能强制;③ 删除扩展必弹一次确认框——chrome.management.uninstall 无法静默
  • 【四个方案对比(为什么选 B)】:方案A 贴合原话(下载 zip→解压新文件夹→人工加载→人工换固定→自动卸旧版)——完全对应原始设想,但解包扩展的 id 由加载路径决定,每次更新产生新 id,工具栏固定每次重做,且硬边界①②③全撞上、每次更新 2 步必须人工;方案B 就地更新(已采用)——加载目录固定为「下载\TE AGENT UPDATE\current\extension」,更新时重建该目录文件后自动刷新:id 不变、固定不丢、零人工,代价是首次启用做一次迁移(此后永远不再);方案C Edge 商店——原生自动更新最可靠,但每版都要过微软审核(数天),与快速迭代冲突;方案D Native Messaging——真全自动但要装注册表宿主(SmartScreen 常告警)、维护成本最高,不采用
  • 【overwrite 铁律例外 · 利弊分析(用户批准)】:铁律「永不使用 conflictAction:"overwrite"」本意是绝不覆盖业务文档(v0.4.3 确立);方案B 要把新版文件写进固定目录,同名文件必须覆盖,否则会堆出「popup (1).js」副本毁掉扩展文件夹。采用收窄例外:全插件唯一入口 downloadOverwrite(),路径必须位于「TE AGENT UPDATE/current/extension/」之下否则直接拒绝,后台 service worker 侧再做一次白名单双保险——该目录只有插件自己的程序文件,无用户数据风险;备选"先删后下"未采用(用户清过下载历史就失效、多两个失败点)
  • 【覆盖写入必然置顶提示(永久生效)】:不论什么时候,只要触发了 conflictAction:"overwrite"(目前只可能发生在更新写入时),就必然调用 recordOverwrite() 在弹窗最顶部显示红底横幅「已覆盖写入 N 个文件:…」,记录持久保存在 chrome.storage.local,点「知道了,清除提示」才清除;"触发 overwrite"与"必然提示"在代码结构上强绑定(静态断言守护:去注释后 conflictAction:"overwrite" 字面量仅允许出现 1 处)
  • 【文档保存路径与更新目录互不干涉(用户要求)】:插件更新专用目录固定为顶层「TE AGENT UPDATE」;设置里把保存路径改成「TE AGENT UPDATE」会被拒绝并红字提示「互不干涉」;历史存量冲突值自动回退默认「TE Web Download」;更新流程启动前再做一次防御校验
  • 【一次性迁移(仅首次)】:更新文件写入固定目录后自动刷新;若当前插件仍从旧目录加载(刷新后版本没变),弹窗顶部出现琥珀色引导横幅:打开 edge://extensions → 移除本插件 → 「加载解压缩的扩展」选「下载\TE AGENT UPDATE\current\extension」。迁移后 id 由新路径派生并固定,今后每次更新全自动、工具栏固定不丢;更新成功时横幅显示「✅ 已就地更新并自动刷新到 vX.Y.Z」
  • 【更新包安全校验】:内存解压(复用 v0.5.8 的 parseZip,zip 不落盘)→ 拒绝路径穿越(../)→ 自动剥外层目录与 extension/ 前缀 → 必须含 manifest.json 否则判包不完整中止 → 逐文件覆盖写入并汇报进度;任一文件写失败即中止(旧版本仍可正常使用,重试即可)
  • 验证:verify_v054.js 扩到 410 项(新增第 22 章 41 项:semver 三态、防干涉六场景、overwrite 白名单六场景、downloadOverwrite 越界拒绝/命中记录/置顶横幅/清除按钮、字面量唯一入口、prepareUpdateFiles 剥壳与防穿越、runUpdate 三态分支全链路、checkUpdatePending 成功/迁移引导两分支;第 1/19 章铁律③断言同步收窄为「唯一入口+白名单」),全套 410 通过 / 0 失败;真实 Edge 端到端实测中发现「.js 写入挂起」问题(详见 V0.6.4 条目),V0.6.4 已修复加固
V0.6.22026-10-12★ 新增「产品图纸语言」设置 + 修复「多图纸料号识别落空」
  • ★ 新增「产品图纸语言」设置 + 修复「多图纸料号识别落空」:同一料号挂多份产品图纸时(如 7-1452668-3 同时挂德语 GER_CD_1452668_A3.pdf 与英文 ENG_CD_1452674_C7.pdf),旧版只会取第一张(德语版)去读图框,而那份图框恰好没印规格编号 → 识别落空
  • 【Bug 原因】:① 识别目标取"第一张"而非"按语言优先"——第一张恰好是没编号的德语版;② 更深层:这两份图纸都没有文字层——德语版是 CCITT 扫描件、英文版是 Pro/ENGINEER 导出后 Ghostscript 重打的纯矢量 PDF(BT/Tf/Tj 全为 0,文字被转成曲线轮廓)。程序读的是 PDF 文本层,两种都读不到 → 不是语言问题,是"图纸本身没有文字";③ 实测该料号还有一张 TIF(GER_CD_1452668.tif),但它是内嵌 CCITT 传真图像的 PDF、同样无文字层
  • 【修复方向】:① 新增设置项「产品图纸语言」(英文/德语/全部,默认英文):检索时只显示所选语言的图纸(仅 1 份时不筛选、所选语言一张都没有时自动全显示、选「全部」不筛选);② 识别图框的目标图纸恒按 英文→中文→德语→最后一张 优先取用(英文优先、读不出自动换下一张,不再"只认第一张");③ 兜底链:PDF 链全读不出 → 再试 TIF 版图纸(英文优先);TIF 也读不出(或根本没有 TIF)时,不再丢弃任何产品规格,直接显示全部语言版本的产品图纸与产品规格,并在状态栏黄底提示原因,请你手动核对图框
  • 【★ 已知限制】:TIF 版图纸官方同样没有提供可解析文字层时,灯箱/放大与 PDF 同理受限于官网原图;插件已尽力"PDF 链 + TIF"双兜底,仍读不出即如实告知、转人工核对,不谎报、不漏显
  • 验证:verify_v054.js 扩到 354 项(新增第 21 章:drawingLangOf 归类、pickSpecTargetChain 优先级链、filterDrawingsByLang 显示筛选、resolveSpecTarget 含 TIF 兜底、getSpecLang/saveSpecLang 持久化与守卫、未命中提示与"显示全部"分支),全套 354 通过 / 0 失败;真实 Edge 端到端(diag_tif_v062.js)24 项全通过 —— 实测 7-1452668-3 在 lang=en 下 PDF 链+TIF 全读不出 → 自动回退显示德语+英文两张图纸、黄底提示"已为你显示全部语言版本"并说明已尝试 TIF;对照料号 5-928999-1(有文字层)识别成功、绿底 ok
V0.6.12026-10-12★ 修复「官网明明有产品图,插件却显示『未发现产品图』」(如 1534334-1)
  • ★ 修复「官网明明有产品图,插件却显示『未发现产品图』」(如 1534334-1):这是 V0.6.0 及更早版本的漏抓 bug。现在这类料号能正常显示缩略图、正常下载产品图
  • 【Bug 原因】:插件从 v0.5.0 起认定「产品图」只有一种长相 —— 按料号归档的专属 DAM 图(/content/dam/te-com/catalog/part/<路径>/<编号>-tN.jpg/jcr:content/renditions/product-*.png,样本 1488991-1 就是这种)。但并非每个料号都有专属图:1534334-1(AMP MCP 1.5K CONTACT)官网用的是共享图库图 /catalog/common/images/PartImages/pr-recmcpst1-5.jpg,路径不含 /content/dam/te-com/catalog/part/ → 被过滤器整条丢掉 → 图片数 0 → 显示「未发现产品图」
  • 【证据链】(真实 Edge + CDP 双路取样):① 用与插件完全相同的 fetch 取回 1534334-1 原始 HTML,整页只有 4 个 <img>,唯一的主图就是那条 PartImages 地址;② 同一地址也写在页面 JSON-LD 的 Product.image 字段里 → 是官网自己认定的本产品图,不是"相关产品"的图;③ 对照样本 1488991-1 有 6 条 DAM 图、0 条 PartImages(老行为不受影响);④ 渲染后 DOM 里其它编号的 product-details.png 全是「类似产品/配套部件」区块的图,且由 JS 客户端注入、不存在于 fetch 原始 HTML,不会误收;⑤ 排除其它嫌疑:fetch 状态 200、文档与规格解析正常 → 不是网络 / 登录态问题
  • 【修复方向】(刻意保守):仅在「专属 DAM 图一张都没有」时才启用兜底,且最多取 1 张 —— ① 优先取页面 <img> 里的 /catalog/common/images/PartImages/*.jpg|png;② 再取 JSON-LD Product.image(<img> 缺失时的兜底,最权威);③ 排除官网占位图 no-image-available.jpg、排除裸域名等空壳值、JSON-LD 非法时不崩。为什么只在"无专属图"时才用?因为有专属图的料号,页面上还挂着"系列/相关产品"的共享图(如 pr1241388.jpg),一并收进来会把别的料号的图混进本料号,这是刻意避免的
  • 【★ 已知限制 —— 用户已确认接受】:共享图库图没有 rendition 机制,实测 ?w=1024 无效(仍是 200×114)、renditions/product-high-res 返回 554/500,原图最大就是 200×114。因此它预览缩略图可用、下载可用,但灯箱放大不会像专属 DAM 图那样升到 2880×2160(高清候选置空、不做换图)。这是官网只提供了这个尺寸,插件无法凭空变清晰
  • 验证:verify_v054.js 扩到 254 项(新增第 20 章 17 项:真实样本 1534334-1 抓到 1 张且 sharedGallery=true / hiResUrl=null / ext=jpg、对照样本 1488991-1 行为不变且未混入共享图、空壳 JSON-LD 不误收、有 DAM 图时共享图不混入、占位图排除、多张共享图只取 1 张、非法 JSON 不崩),全套 254 通过 / 0 失败;真实 Edge 端到端(diag_img1534_v061.js)5 项全通过 —— 实际检索 1534334-1,状态栏报「1 个编号有产品图(共 1 张)」、卡片渲染出缩略图、不再显示「未发现产品图」、按钮变为「下载首张产品图(1 组)」
V0.6.02026-10-12★ 新增「产品规格与图纸识别」
  • ★ 新增「产品规格与图纸识别」:TE 产品图纸右下角图框里印着该产品对应的规格编号(PRODUCT SPEC 108-18030、APPLICATION SPEC 114-18021 / 114-18025)。插件现在能在检索到之后、你点下载之前就把这两行读出来,并据此处理「产品规格」这一类文档
  • 两种过滤语义(设置里二选一,默认「图纸编号」):① 图纸编号 —— 只保留文档编号命中图框编号的那几条产品规格,其余规格直接丢弃;② 追加显示 —— 现有结果一条不动,另外用图框里的编号去官网精确搜一遍,把搜到的规格补在后面(已经存在的不重复补)。只对「产品规格」生效,产品图纸 / CAD文件 一律照常保留、顺序不变
  • 两种触发时机(默认「检索文档」):① 检索文档 —— 点「检索文档」时顺带自查,出来的结果就已经筛好,你照常挑着下载;② 下载全部文档 —— 检索时完全不动,等点「下载全部文档」那一刻才自查,命中编号的规格全部自动下载、未命中的规格跳过不下载,结果列表随后同步刷新
  • 多值全查:图框同一格里写了几个编号就认几个(如 114-18021 / 114-18025),全部拿去比对 / 全部去官网补全;字段本身就是多值设计,单值、多值都正常
  • 来源标记:靠图框识别得到或保留的规格,文档行右侧会多一枚紫色小标记,写清来源与编号(如「PRODUCT SPEC 108-18030」「APPLICATION SPEC 114-18021」);原有的蓝色类别标签与「产品图纸(文档编号)」这类来源标记都保留,不会被顶掉
  • 怎么读出来的(零依赖、不落盘):图框是文字层不是扫描图,所以可以直读——① 用浏览器原生 DecompressionStream 解开 PDF 的 FlateDecode 内容流(和 v0.5.8 解 CAD 压缩包同一套,零第三方库);② 带坐标提取:图框是"标签一行、值一行"的两段式表格,光拼文字找不出对应关系,所以先定位整格内容为 PRODUCT SPEC 的那一格,再取它正下方最近的一格(纵向 3~150、横向 ≤90)抓编号;③ 编号边界用前后断言而非 \b(TE 文件名是 ENG_SS_108-18030_A.pdf,下划线算单词字符,\b 会漏);④ 标签整格匹配,避免正文里的 "application spec." 被误判。窗口数值用真实图纸 5-928999-1 实测校准(纵向 17.29 / 横向 14.05)
  • 读不到时静默降级:没有产品图纸 / 图框是扫描件(无文字层)/ 链接打不开或超时 / PDF 超 16MB 或内容流超 80 段 —— 一律原样返回,不报错、不中断检索、规格照常列全
  • 实现位置:popup.js 新增 extractPdfCells() / pickSpecValueCell() / extractSpecNos() / fetchDrawingSpecNos() / specNoOfDoc() / applySpecRecognition() / rerenderAll(),并接入 onSearch 与 downloadAllDocs 两条链路;设置项 te_spec_mode / te_spec_trigger 沿用"内存态优先 + 用户交互守卫 + chrome.storage.local"写法,更新/重载插件后选择仍在;同一张图纸只解析一次(结果有缓存)
  • 验证:verify_v054.js 扩到 237 项(新增第 19 章 68 项:真实图纸 5-928999-1 三条命中、合成 PDF 的两段式/明文/无标签三种版式、坐标配对 6 个边界、只过滤产品规格不动其它类型、多值全查、标记渲染保留「文档编号」来源、下载全部文档模式跳过未命中、缓存只解析一次、失败静默),全套 237 项通过 / 0 失败;实机 UI 冒烟(真实 Edge + 真实 MV3 popup,diag_spec_ui_v060.js)19 项通过 / 0 失败 —— 新板块真实可见、位置在「解压CAD文件STP」下方、默认勾选「图纸编号 / 检索文档」、切换正确落库、关掉弹窗重开依然回显、用户选过之后不被迟到的异步恢复覆盖
v0.5.92026-10-11★ 修复「全部下载(N 份)」把同一编号拆成多个文件夹
  • ★ 修复「全部下载(N 份)」把同一编号拆成多个文件夹:v0.5.8 及更早版本,点卡片上的「全部下载(N 份)」按钮时,按钮是靠 setTimeout 每隔 600ms 模拟点一次单文档下载,每次单击各自独立判断"存到哪个文件夹"。而文件夹判断内部要等约 1.8 秒的磁盘探测收敛窗口,点击间隔远小于它,于是 N 次点击并发各自决策,按完成先后定成「纯编号 / (1) / (2)…」,同一编号被拆成多个文件夹(实测 1897009-2 → 1897009-2、1897009-2 (1)、1897009-2 (2))
  • 双保险修复:① 卡片按钮改为"先按编号决策一次文件夹,再把同一个文件夹复用给这 N 份文档",不再用 setTimeout 模拟单击;② 在 getFolderName 内部加"同编号并发合并",同一个编号的多次并发调用合并到同一次磁盘探测、共享同一结果,从根上消灭"并发抢文件夹"这一类竞态(顶部「下载全部文档和产品图」按钮本就每编号只决策一次,不受影响)
  • 验证:verify_v054.js 扩到 169 项(新增第 18 章:常量 / 合并分支 / 卡片按钮改"先决策一次" / 旧 setTimeout 已移除 / "同编号并发 3 次只触发 1 次磁盘探测" / 不同编号独立);并用真实 Edge + 真实 MV3 插件端到端验证——注入含 3 份文档的卡片、点「全部下载」,捕获实际落盘路径,确认 3 份文件全部归入同一文件夹(TE Web Download/1897009-2/)
v0.5.82026-10-11★ 新增「解压 CAD 文件(STP)」设置(默认 是)
  • ★ 新增「解压 CAD 文件(STP)」设置(默认 是):CAD 文档下载下来是压缩包(.3d_stp.zip),现在可自动解压——下载时把包内 .stp 等文件直接解压到 TE Web Download/<编号>/,你看到的只有解压后的文件,原始压缩包不会出现在磁盘上。设置项位于「显示产品图预览」下方,可切「否」恢复"下载整个 zip 包"的旧行为
  • 为什么是"压缩包不落地"而不是"下载后再删除"?:MV3 扩展没有磁盘文件读取/删除权限——chrome.downloads 只能写文件,不能读、更不能删已经落盘的文件。所以"先下载 zip → 再删掉"这条路在纯插件内部做不到(已否决)
  • 采用更优方案(zip 不落盘):插件后台直接 fetch 下载链接(已声明 te.com 的 host 权限,可带你的登录态、无跨域问题)→ 在内存里解析 zip 结构并解压 → 把包内文件以 Blob 形式走既有的"认领 + 归档"通道落盘。压缩包从头到尾不落盘,自然也不需要删除
  • zip 解压零依赖:STP 压缩包都是标准 zip 格式,用浏览器原生的 DecompressionStream(Edge 154 支持)即可解 deflate / store 两种压缩方式,不用引入任何第三方库,插件体积几乎不变
  • 好处:① 归档目录干净(<编号>/ 下只有 .stp 文件,不再有 zip 与文件并存);② 复用现有通道(Blob 下载走产品图已在用的认领 + 归档机制,含二次检索归入产品编号文件夹的规则天然继承);③ 失败自动兜底(解压失败——比如加密包、罕见压缩格式——时自动回退为下载原始 zip,功能永不中断)
  • 代价与风险(都可控):① 大文件会占内存(zip 全量读进内存再解压;STP 包通常几十 KB~几 MB,实际无风险;个别超大装配体包 >100MB 会稍慢);② 依赖浏览器内的 TE 登录态(与现在点下载按钮是同一套 cookie,风险很低);③ 作用范围已界定:只对"文件名以 .zip 结尾的 CAD文件(STP)"生效,产品图纸 / 产品规格 PDF 不受影响;「下载全部文档」批量下载也走同一规则
  • 实现位置:popup.js 新增 isCadZip() 判定 + parseZip() / inflateRaw() 内存解压 + downloadUnzipped() 落盘(失败回退 startDownload);单文档与「下载全部文档」两条链路通用;设置项 te_unzip_cad 沿用"内存态优先 + 用户交互守卫"写法
  • 验证:verify_v054.js 扩展至 158 项(新增第 17 章:常量/默认 是 / HTML 控件 / 判定 / 路由 / 兜底 / parseZip 对 store 与真实 deflate 包逐字节一致),全套 158 项通过 / 0 失败;实机 UI 冒烟(真实 Edge + 真实 MV3 popup)6 项通过 / 0 失败——控件真实渲染、默认勾选"是"、切换写入 chrome.storage.local 并更新内存态
v0.5.72026-10-11★ 检索失败自动进入「文档编号二次检索」
  • ★ 检索失败自动进入「文档编号二次检索」:此前产品编号检索失败(如产品页 HTTP 404)会直接显示红色失败卡片;现在凡检索失败的编号都会自动换算成文档编号,到官网「按文档编号搜索」通道再找一次
  • 换算规则(掐头去尾,以 "-" 为界):1743793-3(两段)→ 取第一段 1743793;1-1241438-1(三段)→ 掐头去尾取中间 1241438;1241438(本身无 "-",无法分辨是产品还是文档编号)→ 无需换算、直接进入二次检索
  • 命中即正常出卡片:二次检索找到文档时不再显示「检索失败」,卡片类别标签显示「产品图纸(文档编号)」;下载的文件归档到你输入的原编号文件夹(TE Web Download/1743793-3/);二次检索也没找到才按原样显示失败原因
  • 不套娃:以 108-/114-/501-/411- 开头走文档编号通道的编号自身检索失败时,不再触发二次检索
  • 实现位置:onSearch 的 catch 分支(popup.js)——失败后调 partNoToDocNo(q) 换算 → searchDrawingByDocNo(docNo) 兜底,命中规则与图纸二次检索一致(多条只留 PDF / 单条原样保留)
  • 验证:verify_v054.js 扩展至 134 项(新增第 16 章:换算规则 5 例 / 失败→二次检索命中出卡片 / 落空保留错误卡 / 文档通道不套娃 / catch 静态断言),全套 432 项通过 / 0 失败;实机端到端(真实 Edge + 真实官网)8 项通过 / 0 失败——实测 1743793-3 产品页 404 → 换算 1743793 → 官网通道命中 MCP 9.5MM 1P PLUG ASS'Y.pdf,状态栏「检索完成:共找到 1 份文档」,无失败卡片
v0.5.62026-10-11★ 修复灯箱(放大视图)里只有第 1 张清晰、第 2 张之后发虚的问题
  • ★ 修复灯箱(放大视图)里只有第 1 张清晰、第 2 张之后发虚的问题:现象为点开产品图放大后,首张清楚、往后翻的第 2~N 张明显模糊
  • 异常位置定位(两处,均已核实):①parsePartExtras 的产品图归并逻辑——实测官网产品页只对第 1 张(t1)输出高清直链 product-high-res,第 2 张及之后页面上只给到缩略图 product-small(仅 100×75 px),归并后这些图的 url 也就是缩略图;②renderLightbox 的换图逻辑——放大时直接把该缩略图等比拉伸到显示框,像素不足自然发虚
  • 修复方案(rendition 名可替换):探测证实图片地址中 /renditions/<版本名>.png 这一段可改写——把任意一张图的版本段统一改成 product-high-res 后,每一张都真实可访问(实测均为 2880×2160,单张 55~250 KB);而 product-large / product-medium 在官网侧不存在(返回 HTTP 500),故统一采用 product-high-res。实现上:parsePartExtras 为每张图额外生成高清候选 hiResUrl;renderLightbox 先显示缩略图占位(保证打开瞬间有画面),随后按 hiResUrl → url 优先级探测加载,并仅在固有宽度更高时才替换,不会被小图反向覆盖
  • ★ 新增「帧令牌」保护(杜绝串图):高清图是异步加载的,快速连续左右切换时,晚到的高清图可能错写到已经切走的那一张上。改用每次渲染自增的帧令牌 LB_TOKEN 比对(而非比对图片对象),凡令牌不匹配的在途加载一律作废;关闭灯箱同样使令牌自增,保证关闭后不再回写图片
  • 附带好处:下载到本地的产品图也是高清版:高清通道同时用于「首张直下」、「打包 ZIP 内 _P1…」与灯箱「下载此图」,fetchImageBytes 会优先抓取高清原图、失败时静默回退原地址,因此不再是 100×75 的小图
  • 〔术语备注 · 便于后期维护〕「清晰度档位」:官网图片以「rendition(渲染版本)」区分尺寸,本项目涉及三个档位名——product-small(缩略图,100×75,约 1 KB,用于卡片与占位)、product-high-res(高清原图,2880×2160,用于放大与下载)、product-large/product-medium(官网不存在,HTTP 500,勿再尝试)。地址形态:.../part/.../<基础名>.jpg/jcr:content/renditions/<档位>.png
  • 验证:verify_v054.js 扩展至 119 项(新增第 15 章:高清候选优先级、仅更高分辨率才替换、帧令牌单调递增、closeLightbox 令牌作废、无残留定时器换图写法),全套 417 项通过 / 0 失败;实机复测(真实 Edge + 真实官网)灯箱逐张切换 6 项通过 / 0 失败,5 张产品图全部停在 2880×2160;窗口与灯箱布局实机 18 项通过 / 0 失败;端到端实机 37 项通过 / 0 失败
v0.5.52026-10-11「下载全部产品图」按钮字样随数量设置联动
  • 「下载全部产品图」按钮字样随数量设置联动:选「首张」显示「下载首张产品图(N 组)」;选「全部」显示「下载全部产品图(M 张/N 组)」。其中「N 组」= 有产品图的编号个数(一个编号算一组);切换设置后按钮字样立即刷新,无需重新检索
  • 「下载全部文档」按钮括号补充组数:文案改为「下载全部文档(N 份/G 组)」,G = 有文档的编号个数(如检索 2 个编号共 11 份文档 →「下载全部文档(11 份/2 组)」),与产品图按钮的「组」口径一致
  • 集成按钮括号文案同样联动:选「首张」→「下载全部文档和产品图(文档X份/N组+图片N组)」;选「全部」→「下载全部文档和产品图(文档X份&图片M张/N组)」
  • 顶部提示语:「输入产品编号 → 解析 → 下载文档」改为「输入产品编号/文档编号 → 解析 → 下载文档」(与 v0.3.5 起支持文档编号检索的能力呼应)
  • ★ 本次迭代(布局修复)三项已完成:①弹窗加宽 380 → 520px 并加高上限至 580px(内容超出内部滚动);②灯箱左右切换钮改为绝对定位固定两侧,不再溢出窗口;③产品图改用统一显示框 + 等比缩放,第 2 张及之后不再偏小。上述三项均在 MV3 的 800×600px 硬上限内实现
  • 〔技术约束 · 重要〕弹窗尺寸上限 800×600px:浏览器扩展(Manifest V3 / MV3)的工具栏弹窗(popup)由浏览器强制限制最大 800×600 像素,插件无法突破;当前弹窗宽度为 380px(由 popup.css 的 body { width } 单点控制,其余布局均为百分比/flex 自适应),高度由内容撑开、超过浏览器可视高度后内部滚动。因此后续任何「加大弹窗」的需求都需在上述上限内做取舍
  • 〔已修复 · 灯箱切换钮溢出 + 产品图统一放大〕问题定位:灯箱舞台需求宽度 = 26(左钮) + 8(gap) + 300(图片上限) + 8(gap) + 26(右钮) = 368px,而弹窗 380px 扣除灯箱左右内边距(各 14px) 后舞台可用仅 352px,超出 16px 导致右侧切换钮被挤出窗口;同时图片 min-width:auto 会拒绝收缩、加剧溢出。修复方向:舞台加 min-width:0、图片改 flex:1 1 auto; min-width:0 + 固定显示框 + object-fit:contain(小图随之等比放大)
  • 〔已完成 · 弹窗加宽与加长〕弹窗宽度 380 → 520px(距 800px 硬上限留足余量,防个别 DPI 缩放被截断),并同步设置高度上限 580px + 内部滚动。加宽与加长一起做,比例才协调:只加宽会让弹窗更「扁」;抬高高度上限后单屏能显示更多卡片,观感更像小窗口应用,也给灯箱留出更大放图空间
  • 〔已完成 · 灯箱溢出修复〕左右切换钮改为绝对定位于舞台两侧(#lb-prev{left:8px} / #lb-next{right:8px}),不再参与宽度分配;中间新增显示框 .lb-frame(左右各让位 38px)自动占满剩余宽度。实机测得:右钮 right=737 ≤ 视口 1028,距右边 291px,彻底不再溢出(旧版舞台需 368px > 可用 352px)
  • 〔已完成 · 产品图统一放大〕图片由「只限大(max-width:300px)」改为 .lb-frame 固定显示框 + #lb-img{position:absolute;inset:0;object-fit:contain},尺寸完全由显示框决定。副作用是好的:第 2 张及之后的产品图过去因原图较小而显得偏小,现在与首张显示尺寸完全一致(实机实测各张均为 371×186)
  • 〔术语备注 · 便于后期维护〕「灯箱」= 放大视图:点击卡片缩略图后弹出的全屏遮罩层,技术实现为 CSS position:fixed 遮罩 + 居中面板(DOM id #img-lightbox,样式类 .lb-*,lb = lightbox 缩写),负责显示「第 n / N 张产品图」与下载按钮,关闭按钮为 .lb-close
  • 〔术语备注 · 便于后期维护〕「舞台」= 灯箱里承载图片与左右切换按钮的横向容器:DOM 类名 .lb-stage,内部三件套为 #lb-prev(左切换钮 ‹)、#lb-img(当前图片)、#lb-next(右切换钮 ›)。「舞台」二字只出现在 CSS 类名与代码注释中,界面上不显示,看到「舞台」即指此容器
  • 〔术语备注 · 对应关系〕「灯箱舞台」↔「缩略产品图放大显示」:卡片上的小图(.pn-thumb,即缩略产品图,取产品页 product-small 缩略图直链)点击后 → 打开灯箱(#img-lightbox)→ 图片渲染在「舞台」(.lb-stage)里的 #lb-img 上,此时 #lb-img 的 src 换成高清直链 product-high-res,即缩略图 → 高分辨率大图的放大显示;左右切换只改 #lb-img 的 src,不重建舞台
  • 验证:verify_v054.js 扩展至 75 项(新增 3b 章:独立按钮文案两种模式 + 集成按钮两种括号文案 + 切换即时联动 + HTML 提示语断言),全套 295 项通过 / 0 失败
v0.5.42026-10-13设置新增「下载产品图数量」
  • 设置新增「下载产品图数量」:可选「首张 / 全部」,默认改为「首张」(此前默认是全部下载)。选「首张」时每个产品编号只下载第 1 张产品图,且取消 ZIP 打包、直接下载、文件名不再带 _P 序号后缀(如 1488991-1.png);选「全部」时每个编号的全部产品图打包为压缩包。切换后同时作用于「下载全部产品图」与「下载全部文档和产品图」两个入口
  • ZIP 包命名加前缀:压缩包由 <编号>.ZIP 改为 PIC_<编号>.ZIP;包内文件名仍为 编号_P1、_P2…(连续编号)。无论数量设置为「首张」还是「全部」,在放大图灯箱里点「下载产品图(ZIP)」始终保留 ZIP 格式
  • 放大图支持左右切换:点击缩略图进入放大视图后,图片左右两侧新增 ‹ / › 按钮切换查看该编号的全部产品图,同步支持键盘 ← / → 方向键;标题显示「编号 · 第 n / N 张产品图」
  • 「下载此图」按当前序号下载:显示第几张就下载第几张,文件名保留 _P 序号后缀(如 1488991-1_P2.png),不打包
  • 卡片「下载产品图(N张/ZIP)」按钮移入灯箱:现位于放大视图「下载此图」按钮的右侧,文案为「下载产品图(ZIP · N张)」;卡片区更简洁(仅保留缩略图与无图时的灰字提示)
  • 批量按钮带计数:独立模式按钮文案为「下载全部文档(N 份)」,右侧显示本次检索到的文档总数;集成模式改为「下载全部文档和产品图(文档N份/图片M张)」(原为「下载全部文档(包含产品图)」)
  • 设置项文案:原「关联 下载全部文档 按钮」改为「集成按钮」
  • 默认值调整:文档类型三个选项(产品图纸/产品规格/CAD文件(STP))默认全部勾选;「最近检索」点击编号的写入方式默认改为「叠加」(原为「覆盖」)
  • 验证:新增 verify_v054.js 69 项断言(默认值/按钮计数文案/数量设置存取与守卫/首张免ZIP直下/全部打包 PIC_ 前缀/集成模式两种分流/灯箱切换与键盘/按序号下载/清空计数归零/静态断言),全套 367 项通过 / 0 失败;另做真实 Edge 端到端审计 audit_live_v054.js 37 项通过 / 0 失败(真实 te.com.cn 检索 1488991-1 → 实际落盘 1488991-1.png 与 PIC_1488991-1.zip → 灯箱左右切换与 _P1 单张下载 → 设置持久化重开仍生效)
v0.5.32026-10-12弹窗检索结果缓存(跨弹窗保留)
  • 弹窗检索结果缓存(跨弹窗保留):以前点到弹窗外面的空白处,弹窗关闭后上次的检索结果就消失了,需要重新输编号、重新检索。现在关闭再打开会自动恢复上一次的检索页面 —— 结果卡片、输入框内容、状态栏提示、批量按钮状态原样还原,并在状态栏提示「已恢复上次检索结果」
  • 「清空」是唯一清空入口:点「清空」会同时清掉画面与缓存,之后再打开即是干净的空白界面(语义不变)
  • 批量按钮冻结态一并保留:点了「下载全部文档 / 下载全部产品图」并成功后的灰色「已完成(n/N)」冻结态,关闭弹窗再打开仍然保持(用户确认要求)
  • 存储介质为浏览器会话内存(chrome.storage.session):只存在本次浏览器会话中,浏览器一关自动清空,不长期占用磁盘、不跨浏览器重启复活
  • 恢复不需要联网:检索结果是本地缓存的纯数据(编号/文档字段/图片直链/状态徽章),恢复时直接重绘、不重新发起请求,断网也能看到上次结果列表
  • 带用户操作守卫:若在你打开弹窗后、恢复动作落地前,你已经自己点了「检索文档」或「清空」,插件会放弃这次恢复,绝不覆盖你刚做的事(沿用既有防竞态写法)
  • 验证:新增 verify_v053.js 52 项断言(缓存写入/跨弹窗恢复/清空清除/用户交互守卫/冻结态保留/空结果不写缓存/错误卡片可恢复/静态断言),全套 297 项通过 / 0 失败;另做真实 Edge 端到端审计 audit_live_v053.js 19 项通过 / 0 失败(真实 te.com.cn 检索 → 关闭弹窗 target → 重开恢复 → 断网仍可恢复 → 清空后确实为空)
v0.5.2.22026-10-12独立模式按钮布局修正
  • 独立模式按钮布局修正:改为两行 —— 第一行「检索文档 | 清空」,第二行「下载全部文档 | 下载全部产品图」;关联模式布局保持不变(「检索文档 | 清空」+「下载全部文档(包含产品图)」独占一行)。两模式共用一套 CSS order 排版
  • 设置标题文案:「下载产品图」改为「下载产品图方式」(仍单行完整显示)
  • 关联选项文案:「关联「下载全部文档」」改为「关联 下载全部文档 按钮」
  • 设置标题用色调整:由 TE 橙(#f26522,红相过重、目视像红色)改为亮橙 #ff9a3c(黄相更重),保持橙色观感、消除红色警示感;深蓝底上对比清晰
  • 验证:verify_v052.js 扩展至 48 项(新增 5 项布局断言),全套 245 项通过 / 0 失败
v0.5.2.12026-10-12【缺陷修复 · 致命级】
  • 【缺陷修复 · 致命级】修复「一打开插件就弹出产品图白色方块、且无法关闭」的问题:
    · 现象:打开弹窗即出现图片占位(显示"产品图")与「下载此图」按钮,遮挡界面、无法关闭;
    · 根因:灯箱自身用 ID 选择器声明了 display:flex,优先级高于通用隐藏规则 .hidden 的类选择器,导致「该隐藏却没隐藏」(CSS 特异性冲突,仅此一个元素中招);
    · 修复:.hidden 增加 !important(隐藏语义取得最高优先级,杜绝同类复发),并为灯箱补一条显式 #img-lightbox.hidden 隐藏规则双保险。
  • 交互语义明确:灯箱只在检索到产品图、用户点击缩略图后才出现,此时才提供该图的「下载此图」;点 ✕ / 空白处 / Esc 关闭
  • 实机取证:新增 audit_lightbox_visibility.js(原生 Edge + CDP 读取 getComputedStyle 实测):修复前 display=flex / 1028×641(BUG 复现),修复后 display=none / 0×0(正常);无 hidden 时仍为 flex(打开功能正常)
  • 防回归:verify_v052.js 新增 4 条 CSS 静态断言(.hidden 必须带 !important、不得存在弱化写法、灯箱必须有显式隐藏规则、带 display 的 ID 元素必须都有 hidden 覆盖)
  • 验证:全套 240 项断言通过 / 0 失败(含本次新增 4 项);完整审计报告见「审计报告」板块
v0.5.22026-10-12缩略图交互变更
  • 缩略图交互变更:点击卡片标题右侧的产品图缩略图,改为弹出灯箱查看该图完整版,不再直接触发 ZIP 打包
  • 灯箱内支持单张下载:「下载此图」按钮只下载当前这一张,自动归档为 下载/TE Web Download/<编号>/<编号>_P<序号>.png(与 ZIP 内命名一致);点击 ✕ / 灯箱外空白处 / 按 Esc 关闭
  • 批量按钮「置灰冻结」:「下载全部文档」「下载全部产品图」全部下载成功后,按钮置灰冻结为「已完成(n/N)」,直到下次检索或点「清空」才复位;有失败时恢复可重试
  • 设置文案精简:「产品图下载方式」更名为「下载产品图」并单行完整显示;移除设置面板全部「(默认)」字样(默认勾选不变);各块标题改为橙色加粗
  • 保存路径区改版:「默认保存路径:…」橙色加粗,右侧新增「修改」按钮,点击才展开路径输入框
  • 关联模式布局优化:选「关联下载全部文档」时,「清空」自动移到「检索文档」右侧,「下载全部文档」独占一整行并更名「下载全部文档(包含产品图)」
  • 验证:新增 verify_v052.js(39 项断言:灯箱开关/单张下载归档命名/uniquify 铁律/冻结态/复位/文案结构),既有 197 项回归全部零破坏
v0.5.12026-10-12产品图 ZIP 内文件命名规则变更
  • 产品图 ZIP 内文件命名规则变更:由原来的官网基础图名(如 1488991-1-t1.png)改为 <产品编号>_P1.png、_P2.png …;序号从 1 起、连续不跳号,按产品图原始顺序(t1→tN)依次编号
  • 新增「下载全部产品图」批量下载:一次把本次检索到的所有编号的产品图各打包成一个 <编号>.ZIP;单个编号失败不影响其他编号;只统计有产品图的编号
  • 产品图下载方式可选(设置面板内切换):
    · 独立按钮(默认)——下载按钮区出现独立的「下载全部产品图」按钮;
    · 关联「下载全部文档」——隐藏独立按钮,点「下载全部文档」时在文档下载完成后自动接着打包各编号的产品图。选择本地持久化
  • 下载按钮区改为 2×2 栅格布局:第一行「检索文档 / 下载全部文档」,第二行「清空 / 下载全部产品图」,两种模式下按钮宽度都一致、不换行错位;关联模式下「下载全部文档」独占一整行
  • 「下载全部产品图」按钮状态指示:检索到产品图时点亮为绿色并显示总张数(如「下载全部产品图(12 张)」);未发现产品图时按钮置灰并显示「未发现产品图」,不可点击
  • 卡片内无产品图时的提示:产品图按钮位置改为灰色文字「未发现产品图」,不再整行隐藏,位置始终保持一致
  • 新增产品图预览:结果卡片标题行最右侧显示当前编号第一张产品图的缩略图(52×40,点击即可打包下载);缩略图恒用官网最轻的 product-small 版本(实测约 1.9 KB),不会拖慢弹窗
  • 新增「显示产品图预览」开关(设置面板内切换,默认「是」):选「否」则不显示缩略图
  • 设置面板新增两块独立浅色区域(与「重名处理」块风格一致、上下依次堆叠):「产品图下载方式」(独立按钮 / 关联「下载全部文档」)、「显示产品图预览」(是 / 否)
  • 两个新设置均切换即时生效(内存态优先,沿用重名模式已根治的竞态防护写法)
  • 验证:新增 verify_v051.js(51 项)+ 扩展 verify_v050.js(48 项)全部通过;接管浏览器端到端实测:真实 Edge 加载扩展 → 真实 TE 产品页 → ZIP 落盘内容为 1488991-1_P1.png…_P5.png(连续)✓、zipfile.testzip() 无损坏 ✓、预览图 1,889 B vs 主图 249,027 B ✓、独立/关联模式栅格切换 ✓、批量下载 1/1 成功 ✓。既有 134 项回归零破坏
v0.5.02026-10-12【故事背景】
  • 【故事背景】用户新增两项功能需求:① 在抓取文档的同时,把产品页标题旁的产品状态徽章(有效/试产…)识别出来,显示在检索结果的产品编号右侧;② 把产品页的全部产品图片收集打包成一个压缩包,命名为 产品编号.ZIP。
  • 【先取证再动手:抓真实页面确认 DOM 结构】直接抓取两个真实产品页(1488991-1=有效 / 2-2378904-1=试产)做对照分析:
    · 状态徽章:<ul class="statusContainer"> 内 <a status-btn datacode="active|preliminary"><span>有效|试产</span>,首屏 HTML 直出、无需执行 JS;
    · 产品图:/content/dam/te-com/catalog/part/... 下的官方 rendition——主图 product-high-res.png(高清),缩略图 product-small.png(t1~t5);无图页面为 0 张(可优雅降级);
    · 图片直链可匿名 fetch(实测 200/206),无需任何登录态。
  • 【功能 ① 产品状态徽章】检索时同一份产品页 HTML 顺带解析状态(不增加任何额外请求),渲染在结果卡片编号右侧:绿底「有效」、灰底「试产」、其他状态橙底原文显示;官网无徽章时不显示,不影响文档下载。
  • 【功能 ② 产品图打包 ZIP】有图的编号在卡片内显示「下载产品图(N张/ZIP)」按钮:
    · 抓取该编号全部产品图(主图用高清版,其余用官方缩略图,按基础图归并去重、t1→t5 自然排序);
    · 弹窗内用纯 JS 生成 store 型 ZIP(图片本身已是压缩格式,store 更快且零依赖),中文名自动置 UTF-8 标志位;
    · 保存为 下载/TE Web Download/<编号>/<编号>.ZIP,走既有 queue-filename 认领通道保证归档,重名由浏览器 uniquify 兜底、绝不覆盖。
  • 【过程缺陷即发现即修】首轮端到端实测发现 ZIP 内文件名出现双扩展名(-t1.jpg.png)——基础图名捕获把 .jpg 也吞了。修正正则后复测,ZIP 内为 1488991-1-t1.png 等干净命名。
  • 【验证:全套 134 通过 / 0 失败】新增 verify_v050.js(36 断言):用两个真实页面样本测状态/图片解析、渲染行为、ZIP 结构(独立逐位 CRC 交叉验证 + EOCD/中央目录/本地头三处互证 + 中文 UTF-8 标志位);接管浏览器端到端实测:真实 Edge 加载扩展 → searchPart('1488991-1') → 徽章=有效 ✓、5 张图 ✓ → 真实下载落盘 1488991-1.zip(250 KB)✓ → python zipfile testzip 完整性通过 ✓。既有 98 项回归全部零破坏。
v0.4.32026-10-12【故事背景】
  • 【故事背景】用户关闭了其他插件后实测,反馈了一个比"后缀不对"严重得多的问题:插件把已存在文件夹里的文件覆盖了——而不是按设置新增文件夹并加后缀。要求全量审计代码、分析潜在失效风险、查明 bug 成因,并接管浏览器做动态审计。
  • 【★ 根本原因 1:浏览器"文件是否还在"的标记是延迟刷新的,不是实时磁盘检查】这是本次的关键发现。插件判断"编号文件夹是否已存在",靠的是 chrome.downloads.search() 返回的 exists 字段。我们用真实 profile 做了对照实验:
    · 实验 A(全新 profile):下载文件 → 立刻在磁盘上删掉 → 轮询 exists:0s / 3s / 6s / 12s 全都是 true,到 20s 才变成 false。
    · 实验 B(您的真实 profile,5-928999-1 相关 57 条记录):T+0s 时 49 条全报 true,T+20s 才集体翻正为 false。
    结论:头一次查询几乎必然把"已经被你删掉的文件夹"误报为"还存在"。这就是"幻影文件夹"的来源。
  • 【★ 根本原因 2:您机器上历史与磁盘真相严重脱节】您的下载历史里 TE 相关记录共 501 条,声称存在 20 个编号文件夹(含 5-928999-1、5-928999-1 (1)、5-928999-1 (2) 等);而磁盘上实际只剩 1 个文件夹:5-928999-1 (1)(8 个文件)。
    于是 v0.4.2 在延迟窗口内只读了一次就下结论,误判"编号、(1)、(2) 都还在",一路把后缀加到 (3)——而 (3) 这个文件夹磁盘上根本不存在。
  • 【★ 根本原因 3:v0.4.2 把 conflictAction 改成了 overwrite,是放大器】v0.4.2 为防"插件加一次后缀、浏览器又加一次"的双重后缀,把下载参数从 uniquify 改成了 overwrite。这直接把"探测失误"从"多一个 (1) 文件夹"升级成"不可逆地覆盖用户已有文件"——正是您实测到的现象。
  • 【★ 关键取证:浏览器的 uniquify 只管文件名,完全不管文件夹名】我们绕开 Playwright(它会拦截下载、使文件名到不了磁盘),改为原生启动 Edge + CDP + 让下载真实落盘,做了两组决定性实验:
    · 同文件夹名、不同文件名:连续三次请求 TE Web Download/PN-BB/f1.bin、f2.bin、f3.bin → 三个文件全部落进同一个 PN-BB/,没有产生 PN-BB (1)/。
    · 同文件名、同路径:三次请求 PN-0001/same.bin → same.bin / same (1).bin / same (2).bin,且先落盘的 same.bin 未被覆盖。
    结论:文件夹的 (n) 后缀没有任何浏览器 API 能代劳,必须插件自己算;而文件名的判重交给浏览器是安全且可靠的。
  • 【本版修复(四处,缺一不可)】
    ① 文件夹探测必须"等收敛"(治本):不再读一次就下结论,改为轮询直到连续两轮结果一致,且已等待 ≥1.8 秒才采信,确保读到的是刷新之后的真实结果。
    ② 严格采信条件:只接受 exists === true 且 state === "complete" 的记录,排除在途/中断的下载。
    ③ conflictAction 永久改回 uniquify(安全阀):即使文件夹名算错,最坏也只是多一个 (1) 文件夹,绝不会覆盖/销毁任何已有文件。
    ④ 「重名文档」不再插件侧算后缀(删除 DOC_RESERVED / resolveDocName / detectExistingDocs):实测证明浏览器 uniquify 对文件名完全可靠且不会覆盖,交给它即可,同时天然消除双重后缀问题。
  • 【接管浏览器动态审计(实机取证)】把您的真实 Edge profile 复制副本后加载修复版代码,对 6 个真实编号逐一验证:5-928999-1 探测结果收敛为 ["5-928999-1 (1)"](与磁盘真相完全一致),决策 回到纯编号 5-928999-1;其余 5 个编号探测为空,决策为纯编号。修复前一律跳到 (2)/(3) 的幻影污染彻底消失。共 7 个编号(含全新编号)决策全部正确。
  • 【验证】全套回归 98 通过 / 0 失败:verify_folder_v040(12) + verify_conflict_v041(11) + verify_realsource_v0411(21) + verify_v042(20,已按 v0.4.3 语义重写) + verify_v043(34)。新增 verify_v043.js 专测收敛语义与反污染;verify_v042.js 的文档模式章节改写为断言"委托 uniquify";新增静态断言"全文不得出现 overwrite"。
  • 【给您的操作建议】① 扩展管理页先「移除」旧版卡片,再加载 v0.4.3(两版文件名相同,不移除会继续跑旧代码)。② 建议清理一次陈旧的下载历史:打开 edge://downloads → 清除浏览数据 → 只勾"下载历史"→ 清除。这样历史上那些"其实早就不存在"的幻影记录会消失,插件判断更快更准。清理下载历史不会删除你磁盘上已有的文件。
v0.4.22026-10-11【故事背景】
  • 【故事背景】用户第三次反馈同一现象:选了「重名文件夹」,实际仍按「重名文档」执行。前三版(v0.4.0 / v0.4.1 / v0.4.1.1)都只改了插件自身逻辑,问题却始终不走。这次不再只审代码,而是直接去浏览器里查"到底谁在改我们的下载"——终于找到了真正的元凶。
  • 【★ 根本原因:第三方扩展抢走文件名决定权】读取浏览器 Secure Preferences 后确认:机器上「Marvis 浏览器插件」v0.2.6 一直处于启用状态,并持有 downloads 权限,且它也注册了 chrome.downloads.onDeterminingFilename。反编译其代码,其逻辑是:
    onDeterminingFilename(t, r) { ... if (s) { r({ filename: s, conflictAction: "uniquify" }); return } r() }
    即:从它自己的任务队列里取文件名,覆盖掉我们的路径(Chromium 缺陷 #579563:多个扩展同时决定文件名时以最后一个为准,且扩展无法强制胜过对方)。
    这解释了为什么"修了三次还不好":我们一直在改"我们自己的逻辑",而最终决定权从来不在我们手里。也解释了为什么与模式无关、且时对时错——它不关心你选了哪种模式,只按自己的队列覆盖。
  • 【为什么前三版都白修了】v0.3.8 加了后台认领、v0.4.0 改进磁盘探测、v0.4.1 / v0.4.1.1 修内存态竞态——全部是对的方向,但都在"自家院子"里打转。四版逻辑审计 + 真实源码执行装置 21/21 全过,正是这个悖论暴露了问题不在我们的代码里。真正的教训:当"逻辑全对却依然失效"时,必须跳出代码,去查运行环境。
  • 【本版实现的两项需求(按您的描述逐条落地)】
    ① 「重名文件夹」:下载前检索默认保存路径下是否存在与产品编号/文档编号同名的文件夹;存在则自动加 (1)(2)(3)… 后缀。(沿用 v0.4.0 的磁盘实况探测:读 chrome.downloads.search 的绝对路径 + exists,读取真实文件系统。)
    ② 「重名文档」——本版重写:下载前检索该编号文件夹内是否已有同名文档;有则给该文档加 (1)(2)(3)… 后缀。
    关键改动:旧版把这件事交给浏览器的 conflictAction: "uniquify"——而这恰恰是 Marvis 能劫持的那条路。本版改为插件自己判重:新增 detectExistingDocs() 探测编号文件夹内的真实文档名,新增 resolveDocName() 自己算出唯一文件名(A.pdf → A (1).pdf),并把 conflictAction 从 uniquify 改为 overwrite(文件名已确定唯一,不能让浏览器二次加后缀变成 A (1) (1).pdf)。判重的决定权,由此从浏览器收回到插件手里。
  • 【同批并发与跨模式兼容】新增会话内 DOC_RESERVED 预留表:同一批里多次下载同名文档依次得到 (1)(2),不会互相覆盖;切换模式或点「清空」时一并清空。另外文档判重会同时识别 编号 与 编号 (n) 两种文件夹(因为用户可能从文件夹模式切过来),避免"看起来没重名却覆盖了"。
  • 【验证】新增 verify_v042.js 真实源码验收测试 16/16 全过:覆盖文件夹模式的首次/已存在/加到(2)/手动删除后归零/序号空洞填补,文档模式的首次/已存在/加到(2)/手动删除后归零/不跨编号误判/同批三次递增/无扩展名/跨文件夹模式识别,以及两条端到端路径与 conflictAction=overwrite 断言。既有回归 verify_folder_v040(12) + verify_conflict_v041(11) + verify_realsource_v0411(21) + 文档分类 3 样本(2/1/8)全部零回归。
  • 【请务必做这一步(否则仍会失效)】在扩展管理页(edge://extensions / chrome://extensions)停用「Marvis 浏览器插件」或任何其他下载管理类扩展,然后重新加载本插件、重新下载。这才是本次问题的最终解法——本插件已把能做的都做尽(自判重 + 后台认领 + overwrite),但浏览器安全模型决定了:多个扩展同时声明文件名时,插件无法强制胜过另一个扩展。部署说明书 Q4 已写入完整的自查步骤。
v0.4.1.12026-10-11【故事背景】
  • 【故事背景】v0.4.1 刚上线,用户立刻反馈:问题依旧——设置里选的仍是「重名文件夹」,实际执行的还是「重名文档」分支。也就是说上一版的修复没有命中真正的病灶。用户要求重新定位核心 bug 并给出修复计划。
  • 【为什么上一版没治住(反思)】v0.4.1 的判断方向是对的(确属竞态),但修复只覆盖了三条支路,漏掉了主干上最关键的一行:上一版把守卫加在"给 radio 赋值"之前,却没有拦住"把储存里的旧值写回内存决策变量"这一步;而且上一版的验证用例是重写的简化模型(用 let 模拟),并非真实的 popup.js 源码,所以没有暴露这个漏洞——测试装置本身失真,是这次返工的直接原因。
  • 【本次定位方式升级:真实源码执行装置】这次不再写简化模型,而是用 vm 直接加载 extension/popup.js 原文,注入假的 chrome.storage(可精确控制异步延迟)与假 DOM,跑通 saveConflictMode / restoreConflictMode / getConflictMode / getFolderName 的真实调用链。同时修正了观测手法:顶层 let/const 不挂在沙箱对象上,必须把探针注入沙箱内部用闭包读取(上一版正是因观测失真才误判)。装置一跑,问题立即稳定复现。
  • 【核心 bug 定位(一行代码)】真正的污染源是 getConflictMode() 里这一行:
    CURRENT_CONFLICT_MODE = mode;
    它位于 chrome.storage.local.get 的异步回调里,且无条件执行。而打开弹窗时的 restoreConflictMode() 又会调用它。于是真实时序是:
    ① 打开弹窗 → 发起异步读取(此时内存态仍是 null);
    ② 用户点选「重名文档」→ 内存态被正确写成 file;
    ③ 稍后储存的回调才返回 → 把储存里的旧值 folder 写回内存态,把用户的选择悄悄抹掉;
    ④ 用户点下载 → 读到的是被污染的 folder → 走文件夹分支。
    而上一版的守卫 CONFLICT_USER_TOUCHED 只挡在"UI 赋值"前,挡不住第 ③ 步——这就是"看起来选对了、执行却按另一个来"的真正原因,也解释了为何时对时错(取决于回调与点击谁先谁后)。
  • 【修复计划(已实施)】把守卫前移到"写入内存态之前",让异步回调在用户已交互时既不碰 UI、也不碰内存态,只把当前内存值原样返回:
    ① getConflictMode() 的异步回调内,先判断 if (CONFLICT_USER_TOUCHED) { resolve(CURRENT_CONFLICT_MODE); return; },再才允许回填内存态——一行都不能脏;
    ② saveConflictMode() 里把 CONFLICT_USER_TOUCHED = true 提到写内存态之前,消除同一函数内部的先后缝隙;
    ③ 保留 v0.4.1 已有的正确设计(内存态优先、缓存 key 带 mode 维度、切换即清空缓存与在途预留);
    ④ 把测试装置换成"真实源码执行装置",并新增 3 档异步延迟(10/80/200 ms)参数化用例,确保不同时序下结果一律正确——这是本次返工最重要的流程改进。
  • 【验证】真实源码装置 21 项断言全部通过,其中核心场景"点选后内存态在 restore 回调返回后仍为 file、且实际走 file 分支"在 10ms / 80ms / 200ms 三档延迟下均通过;另覆盖反向场景(储存为 file、用户快速点文件夹,必须走 folder)、全新用户(储存无该键)点选、上一会话偏好恢复、folder→file→folder 往返不脏缓存。同时 verify_folder_v040.js 12/12、verify_conflict_v041.js 11/11、文档分类 3 样本(2 / 1 / 8 份)全部与历史基线一致,零回归。
  • 部署说明书同步更新 Q10:改为说明"恢复旧偏好"与"本次点选"之间的时序竞争,并说明现在用户选择永远优先。
v0.4.12026-10-11【故事背景】
  • 【故事背景】用户实测报障:设置里明确勾选了「重名文件夹」,实际下载却按「重名文档」执行;更蹊跷的是,重新加载插件后偶尔又能正确进入文件夹分支。同一份代码、同样的操作,结果却在"对/错"之间摇摆——这是典型的竞态(race condition)特征,而非单纯的功能缺失。用户要求全量审计代码、定位异常位置、给出根除方案。
  • 【全量审计 · 根因定位】对 popup.js 中"模式读取—模式写入—文件夹决策"整条链路做了逐行审计,并在 node 中构造最小复现,确认了三处互相叠加的根因:
    ① 异步读写竞态(主因)——旧实现里,"保存模式"走 chrome.storage.local.set(异步落库),"读取模式"走 chrome.storage.local.get(异步读取)。用户点选 radio 后立刻点下载时,"读"完全可能先于"写"返回,于是读到的是上一次的旧值。复现结果:写入耗时约 30ms、读取仅需约 1ms,读取必然拿到旧模式——于是"选了文件夹却按文档走"。
    ② 恢复偏好反向覆盖用户选择——弹窗打开时会异步读取上次保存的偏好并回填到 UI(restoreConflictMode)。当这个异步回调返回得比用户的点击晚时,它会把用户刚点的选择改写回旧值。复现结果:点击发生在约 5ms、恢复回调在约 50ms,用户的选择被无声覆盖。
    ③ 文件夹缓存跨模式污染(本版自身缺陷)——v0.4.0 为优化性能加的 FOLDER_CACHE 只以"编号"做 key,没有带上"模式"维度。一旦在 folder 模式下算过某编号的文件夹名,之后切到 file 模式、再切回 folder,缓存里仍留着旧决策,导致决策与实际模式错位。
  • 【根除方案】不做"加个延时""多点一次就好了"这类治标修补,而是从数据流上铲除竞态土壤:
    ① 内存态作为唯一即时真相——新增 CURRENT_CONFLICT_MODE,用户点选的瞬间同步写入内存;读取时内存优先,只有从未初始化过才回落到 storage。写与读不再跨异步边界,"选完立刻下载"必然读到新值。
    ② 用户交互守卫——新增 CONFLICT_USER_TOUCHED 标记:用户一旦手动切换过模式,恢复偏好的异步回调就直接放弃回填,从机制上保证用户选择永远优先于历史偏好。
    ③ 缓存加"模式"维度 + 切换即清空——缓存 key 改为 ${mode}|${编号};并在切换模式时清空文件夹缓存与在途预留表,杜绝跨模式脏数据。同时把"文档模式"分支提前到缓存检查之前返回,两个模式彻底互不干扰。
    ④ 持久化仍走 storage(异步),但只用于"记住偏好",其失败或延迟都不再影响本次会话的正确性——即便存储写入完全没完成,本次下载依然按用户所选执行。
  • 【为何是"根除"而非"修补"】三处根因的共同点都是"把 UI 状态的即时真相交给异步通道管理"。本版把真相收回内存、把异步通道降级为纯持久化用途,竞态赖以存在的条件被消除,因此不再依赖时序运气——这正是旧版"重载后偶尔正常"现象的终结。
  • 【验证】新增 verify_conflict_v041.js 回归用例(11 项)全部通过,逐条对应根因:切模式后立刻下载不得读到旧值、恢复回调晚于用户点击时不得覆盖选择、folder→file→folder 往返缓存不得污染,另含"同批缓存复用(同一编号不拆散)"与"缓存 key 确认带 mode 维度"。文件夹编号 12 项用例与文档分类历史基线全部零回归。
  • 部署说明书同步更新:新增 Q10("选了重名文件夹却按重名文档执行"的原因与说明),并补充 Q7 提示"模式切换即时生效"。
v0.4.02026-10-11【故事背景】
  • 【故事背景】v0.3.8 引入「重名文件夹」模式时,用一个存在浏览器本地、只增不减的计数器来决定「编号 (1)」「编号 (2)」后缀。用户实测发现:把 TE Web Download 里已下载过的编号文件夹手动删除之后,再次下载仍然带着 (1)/(2) 后缀,序号不会归零。
  • 【异常定位】问题出在 popup.js 的 getFolderName():它只读浏览器存储里的计数器(te_folder_counts),计数只加不减,与磁盘上文件夹的实际存在情况完全脱节;用户任何时间手动删文件夹,计数器都不会感知。这是"计数器与磁盘脱节"的架构性缺陷,靠继续修补计数器永远治不好。
  • 【核心修复】改为「磁盘实况优先」:下载前用 chrome.downloads.search 读取历史下载的绝对落盘路径(DownloadItem.filename)与文件是否仍存在(exists),实时推导出该编号在磁盘上实际已占用哪些文件夹。磁盘上没有 → 直接用「编号」;仍存在 → 才依次用「编号 (1)」「编号 (2)」。手动删除后再下载,序号自动回到「编号」原样。
  • 【方案取舍详情】① 探测必须做:这是"用户可随时手动删除文件夹"场景的唯一正确解,且只需现有 downloads 权限(无需 file:// / fileSystem),成本极低。② 计数器不整体删除,而是降级为"会话内在途预留":因为同一批同时下载多个文件时,第一个文件还没落盘、磁盘查不到,若纯靠磁盘会让多个文件抢到同一个序号;保留一个仅存活于本次弹窗的内存预留表即可防撞车,永久累加的那部分逻辑已删除。③ background 认领机制只做最小加固:旧实现"认领一次就删除登记项",导致同一 URL 在同一批里下载多个文件时第二个文件失去路径保护;本版改为"保留 + 3 秒有效期",期间可重复认领。有意不做目录前缀的宽松匹配,以免误认领用户自己发起的、恰好落在同名目录里的正常下载——保留"精确 URL 匹配"这个安全边界。
  • 【异常修复】「重名文档」模式同样受益:认领有效期延长后,同一 URL 连续多次下载(同编号命中多个同名文档)不再丢失子目录保护。
  • 【验证】新增 12 项回归用例全部通过,覆盖:首次下载、下载后手动删除再下载(核心场景,序号回到原样)、未删除时递推 (1)/(2)、序号空洞填补、同批并发防撞车、分层保存路径、非目标目录不误判;产品页文档分类回归与历史基线完全一致(零回归)。
v0.3.92026-10-11设置面板改为两块独立背景区域
  • 设置面板改为两块独立背景区域:上块(深色区)保留「默认保存路径」标题、输入框、保存/取消/浏览器下载设置按钮;「文件夹位于浏览器默认下载目录下…」说明文字移动到上块底部
  • 重名选项移入独立的浅色背景区域(下块),与路径编辑区视觉分离
  • 「重名文件夹」与「重名文档」改为同一行横排显示
  • 「重名文件」字样统一改为「重名文档」
  • 布局规范沉淀:设置面板后续新增板块均各自独立背景块
v0.3.82026-10-11修复下载归档失效(重要)
  • 修复下载归档失效(重要):v0.3.7 实测文件全部落到下载根目录、未进入 TE Web Download\编号\ 文件夹。排查确认插件代码与加载版本均正确,根因是浏览器里其他下载类扩展(如「Marvis 浏览器插件」)注册的 onDeterminingFilename 监听器覆盖了插件传入的子目录(Chromium 缺陷 #579563,TE 服务器返回 content-disposition: inline 又进一步弱化了路径优先级)。本版新增后台文件名认领机制(background.js):插件对自己发起的下载主动建议完整路径「TE Web Download/编号/文件名」,不再受其他扩展干扰;临时停用 Marvis 插件实测文件可正确入文件夹,验证了该结论
  • 重名处理方式可选(设置面板内切换,默认重名文件夹):重名文件夹 = 同一编号再次下载时自动放进「编号 (1)」「编号 (2)」新文件夹,文件保持官网原名;重名文件 = 文件都放同一编号文件夹、同名文件自动加 (1)。选择本地持久化
  • 新增「设置」按钮:位置在顶部「输入产品编号 → 解析 → 下载文档」右侧(即原「默认保存路径:…」的显示位置),金色文字与页面风格区分强调;点击展开设置面板,包含:默认保存路径显示与修改(支持分层如 TE Web Download/2026-10)、重名处理切换、「浏览器下载设置」入口。原顶部路径显示的全部功能移入该面板
  • 标题右侧动态版本号:「TE 产品文档检索」标题右侧显示当前插件版本(如 v0.3.8),自动读取 manifest 版本,每次更新版本号后显示自动同步
  • 「清空」按钮改为红色背景白字,与「检索文档」按钮设计风格一致
  • 「下载全部文档」增加状态指示:默认灰色;当所有编号检索完成且找到可下载文档时变为绿色背景白字(参考「检索文档」风格),表示可以下载
  • 部署说明书同步更新(新增 background.js 文件说明、设置面板用法、根目录问题 FAQ)
v0.3.72026-10-10「清空」右侧新增「下载全部文档」按钮:一键下载本次检索结果显示的全部文档,按钮上显示进度(如 下载中 3/6)
  • 「清空」右侧新增「下载全部文档」按钮:一键下载本次检索结果显示的全部文档,按钮上显示进度(如 下载中 3/6)
  • 默认保存路径改为 下载目录\TE Web Download\<编号>\,每个产品编号/文档编号单独一个文件夹
  • 二次检索找到的文件同样归入产品编号文件夹
  • 顶部「下载文档」右侧显示「默认保存路径:TE Web Download」,点击可修改子文件夹(支持分层如 TE Web Download/2026-10),并提供「浏览器下载设置」入口修改下载根目录
  • 说明:浏览器安全限制,插件无法直接指定绝对路径;保存位置 = 浏览器默认下载目录 + 自定义子文件夹(默认 TE Web Download),文件夹不存在时自动新建
  • 输入框由 3 行增至 5 行,完整显示提示文字
v0.3.62026-10-10新增「产品图纸二次检索」:勾选产品图纸但料号没有图纸时,自动按文档编号再找一次
  • 新增「产品图纸二次检索」:勾选产品图纸但料号没有图纸时,自动按文档编号再找一次
  • 料号 → 文档编号换算(掐头去尾):2-2378904-1 → 2378904;1897009-2 → 1897009;175266-7 → 175266
  • 二次检索命中的文件类别标签显示为「产品图纸(文档编号)」,便于识别来源
  • 命中多个文档时只保留 PDF;只命中一个文档时不限格式;都没命中则按「未找到产品图纸」显示
v0.3.52026-10-10新增「文档编号检索」:108-/114-/501-/411- 开头的编号自动走官网「按文档编号搜索」通道
  • 新增「文档编号检索」:108-/114-/501-/411- 开头的编号自动走官网「按文档编号搜索」通道
  • 后台标签页自动驱动官网搜索页(填编号→搜索→读取结果→自动关闭),访客模式即可使用
  • 文档编号结果只保留 PDF 格式,副标题显示官网「文档类型」列(如 Application Specification)
  • 支持产品编号与文档编号混排输入,各自走各自通道、结果合并显示
  • 新增 scripting/tabs 权限(仅用于 te.com.cn 的搜索页自动化)
v0.3.42026-10-10「最近检索」右侧新增「覆盖 / 叠加」两种写入方式
  • 「最近检索」右侧新增「覆盖 / 叠加」两种写入方式
  • 覆盖(默认):点历史编号时整框替换,保持原有行为不变
  • 叠加:点历史编号时另起一行追加,可连续挑选多个编号一起检索(同编号不重复添加)
  • 两种选择本地持久化,更新插件后依然保留
v0.3.32026-10-10修复「3D PDF 被误判为产品图纸」的 Bug(3D PDF 属 CAD 文件,不是产品图纸)
  • 修复「3D PDF 被误判为产品图纸」的 Bug(3D PDF 属 CAD 文件,不是产品图纸)
  • 产品图纸改用 DocType=Customer Drawing 精确识别,与官网一致
  • 审计并清理兜底规则中的同类误判隐患(使用说明书不再被误报为产品规格)
v0.3.22026-10-10类别标签去掉「官网类别:」前缀,只显示类别名
  • 类别标签去掉「官网类别:」前缀,只显示类别名
  • 「CAD文件」统一更名为「CAD文件(STP)」
v0.3.12026-10-10每个下载项显示官网类别(产品图纸 / 产品规格 / CAD文件)
  • 每个下载项显示官网类别(产品图纸 / 产品规格 / CAD文件)
  • CAD文件 类别只检索 .3d_stp.zip 文件
v0.3.02026-10-10解析架构重构为「规则驱动分类器」,新增文档类型只需加一条规则
  • 解析架构重构为「规则驱动分类器」,新增文档类型只需加一条规则
  • 新增「产品规格」文档类型,与产品图纸分开
  • 修复部分产品(如 1897009-2)产品图纸漏检问题
  • 语言标签改从 DocLang 参数读取,更稳定
v0.2.32026-10-09文案调整:标题改为「TE 产品文档检索」,按钮改为「检索文档」
  • 文案调整:标题改为「TE 产品文档检索」,按钮改为「检索文档」
  • 新增自定义图标(橙色 TE)及打包部署说明书
v0.2.02026-10-09新增 3D_STP 文档类型勾选,支持下载 .3d_stp.zip
  • 新增 3D_STP 文档类型勾选,支持下载 .3d_stp.zip
  • 勾选状态本地持久化,支持多编号批量检索
v0.1.02026-10-09插件 MVP 首发:输入产品编号 → 解析产品页 → 下载产品图纸 PDF
  • 插件 MVP 首发:输入产品编号 → 解析产品页 → 下载产品图纸 PDF
  • 基于用户真实浏览器请求,天然通过官网防护,无需后端

06历史版本

如需回退到指定版本,可下载以下历史包(解压后按同样方式加载)。
⬇ V0.6.19
2026-10-15 · 单文件下载后台化 + 中断可点击重试 + 全新图标
⬇ V0.6.18
2026-10-15 · 移除已撤回的历史记录面板(恢复「最近检索」形态)
⬇ V0.6.17
2026-10-15 · CAD 多格式筛选与按格式解压 + 规格全丢保护阀
⬇ V0.6.16 ⚠ 已撤回
2026-10-13 · 已撤回,请用 V0.6.15(仅供已升级用户手动回退)
⬇ V0.6.15
2026-10-13 · 语言筛选三入口口径统一(识别失败也筛选)+ drawingLangOf 从链接解析 DocLang 兜底
⬇ V0.6.14
2026-10-13 · 二次检索 API 直调(毫秒级)+ 双通道降级兜底 + 权威文件名命名
⬇ V0.6.13
2026-10-13 · 更新提示改道 + 灯箱高清加载提示 + 部署说明书下线 + 版本明细联动
⬇ V0.6.12
2026-10-12 · 全量审计修复(ZIP空文件/更新失效/下载卡死)+ 二次检索提速 + 设置页界面减法
⬇ V0.6.11
2026-10-12 · 修复致命bug:下载编排迁后台(弹窗隐藏/重开不中断)+ 产品规格语言筛选 + 编号标题三色态 + 检索暂停续跑 + 下载进度与终止下载
⬇ V0.6.10
2026-10-12 · 四项调整:「更新」移到版本号右侧(纯文字/设置复位)、版本号大写 V、语言筛选新增「优先日语」、图框识别失败提示精简
V0.6.9
2026-10-12 · 三项修复:占位框随预览设置同步隐藏、占位框两行排版、设置页不可读文字修复
🗂 V0.6.8
2026-10-12 · 更新体验四项:覆盖横幅结构化美化+精准打开更新文件夹(零残留)、更新后自动清理下载历史、审计报告不落盘/说明书自动替换、设置页只读「插件更新路径」
›
🗂 V0.6.6
2026-10-12 · 六项界面优化:SPEC 徽章拆分重排、「未发现产品图」占位框、「全部下载」移标题行、标题行淡黄底、头部压缩、设置页字号统一
›
🗂 V0.6.5
2026-10-12 · 修复真机「更新」失败双根因:目录定名「TE AGENT UPDATE」+ .js 被拦截时弹窗内一键放行(acceptDanger)+ 迁移引导一键按钮
›
🗂 V0.6.4
2026-10-12 · 界面迭代(更新/设置按钮纵向灰底橙字、设置页分组改名)+ 修复「更新」写 .js 挂起(三通道判定 + 45s 自动重试)
›
🗂 V0.6.3
2026-10-12 · 新增「更新」按钮(就地更新:自动检测云端版本→下载→内存解压→覆盖重建→自动刷新;overwrite 例外仅限更新目录且置顶提示;文档路径与更新目录互不干涉)
›
🗂 V0.6.2
2026-10-12 · 新增「产品图纸语言」设置(英文/德语/全部)+ PDF 链读不出再试 TIF 兜底,仍读不出则显示全部图纸与规格并提示
›
🗂 V0.6.1
2026-10-12 · 修复「官网有产品图却显示未发现产品图」(1534334-1 等共享图库图漏抓,无专属图时兜底 1 张)
›
🗂 V0.6.0
2026-10-12 · 新增「产品规格与图纸识别」:读图纸图框 PRODUCT SPEC / APPLICATION SPEC 编号,据此过滤或补全产品规格(可设触发时机)
›
🗂 v0.5.9
2026-10-11 · 修复「全部下载(N份)」拆成多个文件夹(双保险:卡片先决策一次 + getFolderName 并发合并)
›
🗂 v0.5.8
2026-10-11 · 新增「解压CAD文件STP」设置(默认是),CAD 压缩包自动解压、只留包内文件、原始 zip 不落盘
›
🗂 v0.5.7
2026-10-11 · 检索失败自动掐头去尾转文档编号二次检索(1743793-3 → 1743793)
›
🗂 v0.5.6
2026-10-11 · 灯箱产品图全张高清(2880×2160·修复第 2 张之后发虚)+ 帧令牌保护(连续切换不串图)+ 下载到本地也是高清
›
🗂 v0.5.5
2026-10-11 · 下载按钮字样随「产品图数量」联动 + 弹窗加宽 520px + 灯箱切换钮溢出修复 + 产品图统一放大
›
🗂 v0.5.4
2026-10-13 · 下载产品图数量(首张/全部·默认首张)+ 灯箱左右切换 + PIC_ 包名前缀 + 按钮计数
›
🗂 v0.5.3
2026-10-12 · 弹窗检索结果缓存(跨弹窗保留)+ 批量按钮冻结态保留
›
🗂 v0.5.2.2
2026-10-12 · 独立模式按钮布局修正 + 设置标题亮橙 + 文案微调
›
🗂 v0.5.2.1
2026-10-12 · 修复灯箱常驻显示(.hidden 优先级 · 致命级)
›
🗂 v0.5.2
2026-10-12 · 缩略图灯箱看大图 + 单张下载 + 批量按钮置灰冻结 + 设置文案精简
›
🗂 v0.5.1
2026-10-12 · 产品图命名 编号_P1…Pn + 下载全部产品图(独立/关联)+ 产品图预览
›
🗂 v0.5.0
2026-10-12 · 新增产品状态徽章(有效/试产)+ 产品图打包 编号.ZIP
›
🗂 v0.4.3
2026-10-12 · 根治"覆盖已有文件":等 exists 收敛 + 永久回到 uniquify
›
🗂 v0.4.2
2026-10-11 · 插件自判重(重名文档)+ 查明真凶是第三方扩展抢文件名
›
🗂 v0.4.1.1
2026-10-11 · 补上 v0.4.1 漏网的守卫(内存态被回填覆盖)
›
🗂 v0.4.1
2026-10-11 · 治重名模式竞态(内存态优先 + 缓存加 mode 维度)
›
🗂 v0.4.0
2026-10-11 · 修文件夹序号与磁盘脱节(实时探测)
›
🗂 v0.3.9
2026-10-11 · 设置面板分块背景 + 重名文档
›
🗂 v0.3.8
2026-10-11 · 修下载归档被劫持 + 设置面板 + 重名文件夹模式
›
🗂 v0.3.7
2026-10-10 · 下载全部文档 + TE Web Download 归档
›
🗂 v0.3.6
2026-10-10 · 产品图纸二次检索
›
🗂 v0.3.5
2026-10-10 · 文档编号检索(108/114/501/411)
›
🗂 v0.3.4
2026-10-10 · 最近检索支持覆盖/叠加
›
🗂 v0.3.3
2026-10-10 · 修复 3D PDF 误判
›
🗂 v0.3.2
2026-10-10 · 类别标签精简
›
🗂 v0.3.1
2026-10-10 · 显示官网类别
›
🗂 v0.3.0
2026-10-10 · 规则驱动重构 + 产品规格
›
🗂 v0.2.3
2026-10-09 · 文案与图标版本
›
🗂 v0.1.0
2026-10-09 · 首发 MVP
›

07审计报告

历次版本的全量审计与动态取证报告,记录需求达成情况、潜在风险与 bug 根因。
🔍 v0.6.18 基线回退专项审计 · 无 v0.6.16 残留
审计报告_v0.6.18_基线回退专项.md · background/popup.css/zipcore 逐字节一致 · popup.js 全量 diff 逐 hunk 仅 v0.6.17 CAD + 全丢保护阀 · 24 项面板标识符全树 0 命中 · staging 与源码内联关系精确验证(撤回铁律:废弃版须同步回退源码)
›
🔍 v0.6.14「下载中断」异常全量审计 · v0.6.18 复现评估
审计报告_v0.6.14_下载中断异常.md · 全量审计 v0.6.14 生产包对比 v0.6.18 源码 · 根因:单文档 startDownload 依赖 popup 生命周期、无重试、无诊断(批量下载已后台化且含 B3 对账修复,非旧 bug 复发)· v0.6.18 仍会复现 · 推荐方案 C「单文件轻量后台化 + popup 仅做 UI」
›
🔍 v0.6.11 全量审计报告 · 3 个阻断级缺陷 + 二次检索慢根因
审计报告_v0.6.11.md · 5667 行全量只读审计 · 阻断:后台 ZIP 产出 0 字节空文件 / 更新重试后轮询未重启致按钮永久失效 / SW 无启动对账致 UI 死锁 · 二次检索每编号开一次官网标签页(零复用)为慢的首要根因 · 推荐 A+D 组合优化
›
🔍 v0.5.9 修复报告 · 「全部下载(N份)拆成多文件夹」已根治
审计报告_v0.5.8.md(同篇,已追加修复结论)· 双保险:卡片按钮先决策一次再复用 + getFolderName 同编号并发合并 · 静态 169 项 / 实机端到端 4 项均通过
›
🔍 v0.5.8 审计报告 · 「全部下载(3份)拆成 3 个文件夹」根因定位
审计报告_v0.5.8.md · 文件夹决策全链路审计(何时新建 / 何时加 (n))· 卡片级按钮 600ms 模拟单击 × 1.8s 探测收敛 = 必现竞态 · 根因已修复于 v0.5.9(双保险方案)
›
🔍 v0.5.2 全量审计报告(灯箱致命缺陷)
审计报告_v0.5.2.md · 致命级 bug 根因(CSS 特异性冲突)+ 实机取证 + 修复方案与防回归
›
🔍 v0.4.3 全量审计报告
审计报告_v0.4.3.md · 需求达成 / 风险 / bug 根因(含实机取证)
›

08版本信息

最新版本
V0.6.19
产品图来源
专属 DAM 图(多张、2880×2160 高清)优先;无专属图时兜底共享图库图 1 张(受官网原图所限最大 200×114,灯箱不升高清)
文档类型
产品图纸 / 产品规格 / CAD文件(默认全部勾选;CAD 细分 STP/IGS/DXF/3D PDF 在设置「CAD文件筛选」里勾选,默认仅 3D_STP)
产品规格与图纸识别
图纸编号(默认,只保留命中的规格)/ 追加显示(用图框编号补全)· 触发时机:检索文档(默认)/ 下载全部文档
适用浏览器
Chrome / Edge
是否需要后端
不需要
弹窗缓存
关闭再打开自动恢复上次检索结果(点「清空」才真正清空)
下载产品图数量
首张(默认,免 ZIP 直下)/ 全部(打包 PIC_<编号>.zip)