﻿﻿================================================================
     TE 产品文档检索 浏览器插件 — 部署说明书  （v0.6.4）
================================================================

这个插件的用途：
  在浏览器里输入 TE 产品编号，自动帮你下载产品的
  「产品图纸」「产品规格」和「CAD文件 (STP)」文档；
  输入 108-/114-/501-/411- 开头的文档编号，会自动改用
  TE 官网「按文档编号搜索」通道，列出并下载全部 PDF 文档。
  勾选「产品图纸」但该料号没有图纸时，插件会自动把料号换算成
  文档编号，再去官网找一次（二次检索）。
  同时识别产品状态（有效/试产…），显示在结果编号右侧；
  显示首张产品图的缩略预览，点击缩略图可放大查看全图，
  放大后可左右切换查看该编号的全部产品图（也支持键盘 ←/→），
  并可下载"当前这张"或把该编号的全部产品图打包成
  PIC_<编号>.ZIP（压缩包内命名为 编号_P1、_P2…，连续编号）。
  ★「下载产品图数量」可设置：
     · 首张（默认）→ 每个编号只下载第 1 张，**不打包、直接下载**，
                     文件名就是「编号.扩展名」（不带 _P 序号）；
     · 全部        → 每个编号的全部产品图打包为 PIC_<编号>.ZIP。
  所有文件默认保存到「下载目录\TE Web Download\<编号>\」，
  保存路径、重名处理、下载产品图方式与数量、预览开关，都可在
  插件顶部右侧的「设置」里修改。
  （v0.5.3 新增）关闭弹窗再打开时，会自动保留上一次的检索结果
  和输入内容；只有点「清空」才会真正清空。
  ★（v0.6.0 新增）「产品规格与图纸识别」：
     插件会读取该产品「产品图纸」右下角图框里印的
     PRODUCT SPEC / APPLICATION SPEC 编号（图框里写几个就认几个），
     再据此处理「产品规格」这一类文档：
       · 图纸编号（默认）→ 只保留文档编号命中图框编号的那几条
                            产品规格，其余规格丢弃；
       · 追加显示        → 不改现有结果，用图框里的编号去官网
                            精确补出对应的规格文档，加在后面。
     触发时机可选「检索文档」（默认，检索过程中自动自查）或
     「下载全部文档」（点该按钮时才自查，命中的规格全部下载、
     未命中的规格跳过不下载）。
     靠图框识别得到/保留的规格，会在文档行右侧多一枚紫色标记，
     写清来源与编号（如「PRODUCT SPEC 108-18030」）。
  ★（v0.6.1 修复）部分料号（如 1534334-1）在 TE 官网用的是「共享图库图」
    （/catalog/common/images/PartImages/…）而不是按料号归档的专属 DAM 图，
    旧版只认后者，会把它误判成「未发现产品图」。现在已能识别：
    仅在「没有专属图」时兜底、最多 1 张；受官网原图所限最大只有 200×114，
    所以预览/下载可用，但灯箱放大不会升到高清（详见 Q30）。
  ★（v0.6.2 新增/修复）同一料号挂了多份产品图纸时，新增设置项「产品图纸语言」
    （英文/德语/全部，默认英文）：
     · 检索结果里只显示所选语言的那一份图纸（仅 1 份时不筛选、直接显示；
       所选语言一张都没有时自动全显示兜底；选「全部」不筛选）。
     · 用于识别图框规格编号的目标图纸，恒按 英文→中文→德语→最后一张 优先取用
       （任何时候都优先英文，但英文读不出会自动换下一张，不再"只认第一张"）。
       实测 7-1452668-3 的两份图纸——德语是扫描件、英文是 Pro/ENGINEER 导出的
       纯矢量件（文字被转成曲线，无文本层）——都没有可读的文字层，旧版只取第一张
       （德语）会直接识别落空；现在优先英文、读不出依次换、仍读不出则如实提示。
     · 若 PDF 图纸链（英文→中文→德语→最后一张）全部读不出，会再尝试该料号的
       TIF 版图纸（英文优先）作为识别的最后兜底；TIF 也没有文字层（或根本没有
       TIF）时，插件不再丢弃任何产品规格，而是**直接显示全部语言版本的产品图纸
       与产品规格**，并在状态栏黄底提示原因，请你手动核对图框（详见 Q31）。
  ★（v0.6.4 迭代）界面与设置文案调整：
     · 「更新」按钮移到「设置」按钮**上方**，两个按钮统一改为
       灰色底 + 橙色字（按钮形态与「检索文档」一致）；
     · 设置页两组设置项改名并归为一组（中间不留空隙）：
       「产品图纸识别规格编号的下载筛选」：开启 / 关闭
       （原「产品规格与图纸识别」：图纸编号 / 追加显示）；
       「产品图纸识别规格编号的触发时机」：检索文档 / 下载全部文档；
       「产品图纸语言版本筛选」：优先英文 / 优先德语 / 全部
       （原「产品图纸语言」：英文 / 德语 / 全部）。
       只是改名字和摆位，各选项的实际功能与默认值完全不变；
     · 更新链路加固（修复 v0.6.3 实测发现的「.js 文件写入挂起」，
       详见 Q33）：完成判定改「事件 + 轮询 + 数据落盘」三通道，
       45 秒无结果自动重试一次，.js 文件提前写入，失败时给出
       明确的人工排查提示。
  ★（v0.6.3 新增）「更新」按钮（就地更新，方案B）：
     弹窗右上角「设置」上方多了「更新」按钮。点一下即可：
       · 自动检测云端最新版本号并与当前版本比对；
         一致时提示「版本号已经是最新版本，请人工核验」；
       · 有新版本时自动下载更新包 → 内存解压 → 覆盖重建
         「下载\TE插件更新\current\extension\」→ 自动刷新插件。
     两条硬性保障（用户要求）：
       · 文档保存路径与插件更新目录互不干涉：设置里把保存路径
         改成「TE插件更新」会被拒绝并红字提示；历史存量冲突值自动回退默认。
       · 覆盖写入必然置顶提示：不论什么时候，只要插件触发了
         conflictAction:"overwrite"（目前只可能发生在更新写入时），
         弹窗最顶部就会出现红底横幅「已覆盖写入 N 个文件：…」，
         记录持久保存，点「知道了，清除提示」才消失。
     首次启用需一次性迁移（详见 Q32）：把插件加载目录切换到
     「下载\TE插件更新\current\extension」；此后每次更新全自动，
     扩展 id 不变、工具栏固定不丢。
  不需要安装任何编程环境，不需要联网到某个服务器，
  只要你的电脑能正常上网、能打开 te.com.cn 即可使用。


----------------------------------------------------------------
一、你需要准备的东西（全部已经在「TE产品文档检索」文件夹里）
----------------------------------------------------------------
  1. manifest.json
  2. background.js
  3. popup.html
  4. popup.css
  5. popup.js
  6. icons 文件夹（里面有 4 张图标）
  7. 本文档（部署说明书.txt）
  重要：请保证上面这些文件和文件夹“原样在一起”，不要
        删改、不要只复制其中几个文件。


----------------------------------------------------------------
二、安装插件（只需做一次）
----------------------------------------------------------------
  第 1 步：打开你电脑上的浏览器
      - 如果你用 Google Chrome：双击桌面上的 Chrome 图标
      - 如果你用 Microsoft Edge：双击桌面上的 Edge 图标
      （两个浏览器都可以，以下步骤几乎一模一样）

  第 2 步：打开“扩展程序”管理页面
      在浏览器最上方的“网址输入框”里，删除原有文字，
      完整输入下面这一行，然后按回车键：
          chrome://extensions
      （如果你用的是 Edge 浏览器，就输入：edge://extensions）

  第 3 步：打开“开发者模式”
      页面右上角有一个写着“开发者模式”的开关，
      用鼠标点一下，让它变成“打开/蓝色”状态。

  第 4 步：加载插件文件夹
      页面左上角（或左上方）会出现一个按钮，
      写着“加载已解压的扩展程序”，用鼠标点它。
      → 在弹出的窗口里，找到并“选中”这个文件夹：
            TE产品文档检索
      （注意：选这一整个文件夹，不要点进去只选某一个文件，
        选完后点窗口右下角的“选择文件夹”按钮）

  第 5 步：确认安装成功
      页面上会出现一个卡片，名字是“TE 产品文档检索”，
      图标是一个橙色的“TE”方块。这就装好了！

  小提示：如果这台电脑以前装过旧版本，请先把旧版卡片
          点“移除”，再按上面步骤加载新版，避免冲突。
          （v0.5.1 及以后各版的文件名完全相同，不移除旧版
            会继续运行旧代码。）


----------------------------------------------------------------
三、怎么使用
----------------------------------------------------------------
  1. 点击浏览器右上角的拼图图标（🧩，叫“扩展程序”按钮），
     在里面找到“TE 产品文档检索”，点击它，弹窗就出来了。
     （如果工具栏上已经能看到橙色 TE 图标，直接点那个图标也行）

  2. 在弹窗里勾选你想要下载的类型（可以多选）：
         ☑ 产品图纸      （TE 官方「产品图纸」区块，PDF）
         ☐ 产品规格      （TE 官方「产品规格」区块，PDF）
         ☐ CAD文件(STP)  （只下载后缀为 .3d_stp.zip 的文件）
     勾选状态会被记住，下次打开还是你上次的选择。

  3. 在输入框里输入产品编号，每行一个，例如：
            5-928999-1
            175266-7
     然后点“检索文档”按钮。

  4. 稍等几秒，界面会列出每个编号找到的文件，
     每个文件左上角有一个蓝色标签，标明它在 TE 官网
     属于哪个区块（产品图纸 / 产品规格 / CAD文件(STP)）。
     点“下载”即可保存，同一个编号有多份文件时，
     还可以点“全部下载”一次全存。

  4a.【产品状态徽章（v0.5.0 新增）】
     每个编号的标题右侧会显示官网标注的产品状态，
     例如绿底的「有效」、灰底的「试产」。官网没有状态
     时不显示，不影响文档下载。状态与文档解析共用一次
     页面请求，不会因此变慢。

  4b.【产品图预览与打包（v0.5.0 新增，v0.5.1 调整命名）】
     编号标题右侧（开启预览时）会显示该编号第一张产品图
     的小缩略图；点击缩略图会弹出灯箱显示该图的完整版，
     灯箱内提供「下载此图」按钮，可单独下载当前这一张
     （保存为 下载目录\TE Web Download\<编号>\编号_P<序号>.png，
     与压缩包内命名一致）。关闭灯箱：点 ✕、点灯箱外的
     空白处或按 Esc。缩略图不再直接触发打包下载。
     每个编号的图片行（编号下方）有一个按钮：

       「下载产品图(N张/ZIP)」
         把该编号的全部产品图打包成一个压缩包，保存为
             下载目录\TE Web Download\<编号>\<编号>.ZIP
         压缩包里的文件名依次为：
             编号_P1.png、编号_P2.png、编号_P3.png …
         （序号从 1 起，连续编号、不跳号）

       「未发现产品图」
         如果该编号官网没有产品图，按钮位置会变成
         灰色文字「未发现产品图」，表示无图可打包。

     下载按钮区（“下载全部文档”/“清空”所在的两行按钮）：
       · 独立模式下多出一个「下载全部产品图」按钮，
         点一次把本次检索到的所有编号各打成一个
         <编号>.ZIP；检索到有图的编号后该按钮变绿并显示
         总张数；一个产品图都没有时按钮置灰、显示
         「未发现产品图」不可点击。
       · 关联模式下「清空」按钮会移到「检索文档」右侧，
         「下载全部文档」独占一整行，文案变为
         「下载全部文档（包含产品图）」，点击后先下载文档、
         再自动接着打包各编号的产品图。
       · 两种模式在「设置 → 下载产品图」里切换。
       · 「下载全部文档」「下载全部产品图」全部下载成功后，
         按钮会置灰冻结为「已完成（n/N）」，直到下次检索或
         点「清空」才复位；个别失败时按钮恢复可重试。
     说明：产品图打包失败不会影响文档的下载结果，
           两者分别统计。

  5. 【保存位置与重名处理（v0.3.8 更新，v0.4.1 修正切换）】
     所有文件默认保存到：

         下载目录\TE Web Download\<编号>\<文件名>

     - 每个产品编号/文档编号单独一个文件夹，
       文件夹名就是编号本身。
     - 二次检索找到的文件，也归到产品编号文件夹里。
     - 点击插件顶部右侧的「设置」（金色文字），可打开
       设置面板，面板分四块区域（自上而下）：
         · 上块（深色区）：默认保存路径 —— 标题橙色加粗，
           显示当前子文件夹名，右侧有「修改」按钮，
           点「修改」才展开输入框（比如改成
           TE Web Download/2026-10 按月份分层），
           点「保存」生效；底部附说明文字。
         · 第 2 块（浅色区）：重名自动加 (1) 后缀 —— 两种
           模式同一行可自由切换（选择会记住）：
             ○ 重名文件夹 —— 下载前会实时检查
               TE Web Download 里该编号的文件夹是否还存在：
               若不存在（含你已手动删除的情况）则直接用
               「编号」；仍存在才依次用「编号 (1)」「编号 (2)」。
               文件本身保持官网原名不变。
             ○ 重名文档 —— 所有文档都放进同一个编号文件夹，
               下载前会检查该编号文件夹里是否已有同名文档：
               没有则用官网原名；已有则自动加（1）（2）（3）……
               后缀（例：ENG_CD_929454_C29 (1).pdf）。
               判重只在本编号文件夹内进行，不会受其他编号影响。
         · 第 3 块（浅色区，v0.5.2 新增）：下载产品图方式（单行显示）——
              ○ 独立按钮 —— 下载按钮区显示独立的
                「下载全部产品图」按钮，点它一次打包全部编号。
              ○ 关联 下载全部文档 按钮 —— 隐藏独立按钮，
                点「下载全部文档」时先下载文档、再自动接着
                打包各编号的产品图（一次点击两件事都做完）。
           切换即时生效，选择会被记住。
         · 第 4 块（浅色区）：显示产品图预览 ——
              ○ 是 —— 结果卡片编号右侧显示该编号
                首张产品图的缩略图（点击查看大图并可单独下载）。
              ○ 否 —— 不显示缩略图。
         · 第 5 块（浅色区，v0.6.0 新增）：产品规格与图纸识别 ——
           位置在「解压CAD文件STP」下方，分两行：
             ① 过滤语义（怎么对待产品规格）：
                ○ 图纸编号（默认）—— 读该产品图纸图框里的
                  PRODUCT SPEC / APPLICATION SPEC 编号，
                  只保留文档编号命中其中任意一条的产品规格，
                  其余规格直接丢弃。
                ○ 追加显示 —— 现有检索结果一条不动，另外用图框
                  里的编号去官网精确搜一遍，把搜到的规格文档
                  补在后面（已存在的编号不会重复补）。
             ② 触发时机（什么时候做这件事）：
                ○ 检索文档（默认）—— 点「检索文档」时，在检索
                  过程中顺带自查，结果直接就是筛好的。
                ○ 下载全部文档 —— 检索时不动，等点「下载全部文档」
                  时才自查；命中编号的规格全部自动下载，
                  未命中的规格跳过不下载。
           只对「产品规格」这一类生效，产品图纸 / CAD文件(STP)
           一律照常保留、顺序不变。
           注意：必须勾选了「产品规格」本功能才会启动；如果该
           编号一张产品图纸都没有（无从读图框），则原样返回，
           不做任何过滤，也不会报错。
           选择会被记住（与重名模式一样存本地，更新插件后仍在）。
           v0.5.2 起，设置面板所有「（默认）」字样已移除，
           各块标题为橙色加粗，默认勾选不变。
           缩略图恒用官网最轻的版本（实测约 1.9 KB），
           不会拖慢检索。切换即时生效，选择会被记住。
     - ★ 重要提醒（v0.4.2）：本插件的「重名文件夹 / 重名文档」
       判重由插件自己完成，**不依赖浏览器**。但如果你的浏览器里
       同时装了**其他带下载管理功能的扩展**（例如「Marvis 浏览器
       插件」等），它们会抢走下载文件名的决定权，从而**破坏文件夹
       归类与重名后缀**，表现为「设置了却不生效、时对时错」。
       遇到这种情况，请在浏览器扩展管理页里**停用其他下载类扩展**，
       再重试即可。（本插件已尽力对抗，但浏览器规定多个扩展同时
       声明文件名时以最后一个为准，插件无法强制胜过对方。）
     - 想改“下载根目录”（比如从 C 盘改到 D 盘），
       点击设置面板里的“浏览器下载设置”，在浏览器设置里改，
       插件会自动跟随。
     - 例：你的电脑默认保存到
         C:\Users\KK\Downloads\TE Web Download\1897009-2\…
       其他电脑则保存到该电脑浏览器设置的下载目录下，
       文件夹不存在时浏览器会自动新建。

  6. 【下载全部文档】
     “清空”按钮右边是“下载全部文档”按钮：
     - 检索完成且找到文档后，按钮会变成绿色，表示可以下载；
     - 点一下，本次检索结果显示的所有文档全部自动下载
       （每个文件按各自的编号归到对应文件夹），按钮上会
       显示下载进度，例如“下载中 3/6”，完成后显示
       “已完成（6/6）”。
     注意：第一次使用时浏览器可能询问“是否允许下载
     多个文件”，点“允许”即可。

  7. 【文档编号检索】108-/114-/501-/411- 开头的编号
     这类编号是 TE 的“档案编号”（文档编号），不是产品料号。
     插件会自动识别（无需任何设置），改走 TE 官网
     “工具及资源 → 按文档编号搜索”通道：

       - 检索时插件会在后台自动打开官网搜索页，
         填入编号、点“搜索”，读取结果后自动关闭该页面，
         全程无需你操作，也无需登录（访客模式即可）。
       - 结果只保留 PDF 格式的文档；每个文件下方会显示
         官网标注的“文档类型”（如 Application Specification）。
       - 这类编号不受上方“文档类型”勾选影响，全部列出。
       - 一个输入框里可以混着写产品编号和文档编号，
         每行一个，各自走各自的通道，结果合并显示。
       - 注意：材料声明类文档官网要求登录后才能搜索，
         未登录时这类文档不会出现，属正常现象。

  8. 【二次检索】勾选「产品图纸」但料号没有图纸时
     有些料号在官网产品页上确实没有产品图纸，但它的图纸
     是以「文档编号」的形式存在的。插件会自动帮你再找一次：

       - 触发条件：你勾选了「产品图纸」，且该料号产品页
         没找到产品图纸。（未勾选产品图纸时不会触发）
       - 换算公式：把料号“掐头去尾”得到文档编号
           · 2-2378904-1  →  2378904   （去掉开头的 2- 和结尾的 -1）
           · 1897009-2    →  1897009   （去掉结尾的 -2）
           · 175266-7     →  175266
       - 然后用换算出的编号去官网文档编号通道再搜一次。
       - 二次检索到的文件，类别标签会显示为
         「产品图纸（文档编号）」，方便你识别来源。
       - 如果二次检索也没找到，就按“未找到产品图纸”显示。
       - 说明：命中多个文档时只保留 PDF 格式；如果只命中
         一个文档，则不限格式直接列出。

  9. 【最近检索 的用法】
     弹窗底部有“最近检索”，会记录你查过的编号，点一下即可
     回填到输入框。它的右侧有两个勾选，用来控制“点击编号后
     往输入框里怎么写”：

         ○ 覆盖（默认）—— 点编号后，输入框里的内容会被这个
                            编号「整个替换掉」。
         ○ 叠加         —— 点编号后，输入框会「另起一行」追加
                            这个编号，原来已经写好的编号不会被
                            冲掉。适合连续挑几个编号一起检索。
                            例如输入框是空的：
                              先点 5-928999-1 → 输入框第 1 行 5-928999-1
                              再点 1897009-2  → 输入框第 2 行 1897009-2
                            同一个编号重复点击不会重复添加。

     两个勾选的选择同样会被记住。

  10.【产品规格与图纸识别（v0.6.0 新增）】
     很多 TE 产品图纸的右下角图框里，会印着这个产品对应的
     规格文档编号，例如：

             PRODUCT SPEC        108-18030
             APPLICATION SPEC    114-18021 / 114-18025

     插件能自己把这两行读出来（不需要你先把图纸下载到本地，
     检索到之后、下载之前就能读），然后按设置处理「产品规格」：

       · 图纸编号（默认）：只保留文档编号命中图框编号的规格。
         例：图框写 108-18030 与 114-18021，检索到 5 条规格，
         那么只有 108-18030、114-18021 这两条留下来，其余 3 条
         直接不显示；产品图纸、CAD 文件该几份还是几份。
       · 追加显示：现有 5 条一条不少，另外用图框里的编号去官网
         精确搜一遍，把搜到的规格补在后面（已经有的不重复补）。
       · 图框里同一行写了多个编号（如 114-18021 / 114-18025）时，
         两个都会认、都会拿去比对/补全。
       · 命中的规格，文档行右侧会多一枚紫色小标记，写清是哪一行
         图框认出来的，比如「PRODUCT SPEC 108-18030」；
         原有的蓝色类别标签和「产品图纸（文档编号）」这类来源
         标记都还在，不会被顶掉。

     什么时候做这件事，由「触发时机」决定：
       · 检索文档（默认）：点「检索文档」时顺带自查，出来的结果
         就已经是筛好的，你照常挑着下载。
       · 下载全部文档：检索时完全不动，等你点「下载全部文档」
         时才自查一遍——命中编号的规格全部自动下载，没命中的
         规格跳过不下载，随后结果列表同步刷新。

     读不到图框时的表现（都不影响正常使用）：
       · 该编号没有产品图纸 → 无从识别，产品规格原样全部列出；
       · 图框是扫描件（纯图片、没有文字层）→ 读不出编号，同上；
       · 图纸下载链接打不开/超时 → 静默跳过，结果原样返回，
         不会报错、不会卡住检索。


----------------------------------------------------------------
四、常见问题（小白必看）
----------------------------------------------------------------
  Q1：菜单里找不到“TE 产品文档检索”图标？
      点浏览器右上角的拼图图标（🧩），在弹出的列表里
      就能看到它；也可以用旁边的“图钉”把它钉到工具栏上。

  Q2：图标还是显示成灰色的“T”？
      这是浏览器缓存。关闭浏览器（右上角 × 关掉），
      重新打开一次，图标就会变成橙色的“TE”。

  Q3：点了下载没反应？
      看看浏览器底部有没有弹出“是否允许下载多个文件”
      的提示，点“允许”。文件会存到“下载/TE Web Download/<编号>/”里。

  Q4：文件没有被归进编号文件夹，直接落在下载根目录？
      这是被其他带下载功能的浏览器插件（如“Marvis 浏览器
      插件”等下载管理类扩展）拦截了文件名。v0.3.8 已通过
      后台文件名认领机制修复，一般不会再出现；若仍遇到，
      可临时停用其他下载类扩展后重试。
      ★ 特别提醒（v0.4.2）：如果你发现「设置了重名文件夹却按
        重名文档执行」、或文件夹归类/后缀时对时错，几乎可以
        确定是同类问题。排查方法：打开浏览器扩展管理页
        （edge://extensions 或 chrome://extensions），逐个
        **临时停用**带下载管理功能的扩展（尤其名字里带
        「下载」「Download」「Marvis」的），每停用一个就重新
        下载一次。停到哪一个之后立刻正常了，那一个就是元凶。
        本插件无法在代码层面强制胜过它——浏览器规定多个扩展
        同时决定文件名时以最后一个为准。

  Q5：提示“产品页请求失败 / 未找到文档”？
      多半是编号输错了，或者这个编号在 te.com.cn 上
      确实没有该类型文档。换个正确编号再试。
      提示：产品图纸 与 产品规格 是两种不同的文档，
            有些编号只有规格、没有图纸，这是正常的。

  Q6：我要拷给同事/换另一台电脑用？
      直接把“TE产品文档检索”整个文件夹（或一个 zip 包）
      拷过去，按本说明“第二步”重新加载一次即可。

  Q7：更新插件后，之前勾选的内容会丢吗？
      不会。文档类型、覆盖/叠加、保存路径、重名处理模式、
      产品图下载方式、产品图预览开关，都存在浏览器本地，
      更新插件后依然保留。
      （v0.4.1 起：重名处理模式的切换会“立即生效”，
        v0.5.1 起：产品图下载方式与预览开关同样“立即生效”，
        都不必等它存盘完成即可放心下载。）

  Q8：更新到 v0.3.5 时浏览器弹出“已请求其他权限”？
      正常现象。文档编号检索需要“读取标签页”和
      “在网页中执行脚本”两项新权限（只用于 te.com.cn），
      点“接受”即可，之后照常使用。

  Q9：文档编号检索一直转圈/提示未找到搜索框？
      可能是网络较慢，官网页面没加载完。稍后重试一次；
      若仍失败，手动打开官网确认能正常访问后再试。

  Q10：我明明选了「重名文件夹」，下载时却按「重名文档」执行？
      v0.4.1.1 已根治。原因是「恢复上次偏好」与「本次点选」之间存在
      时序竞争：打开弹窗时，插件会异步去读取你上次保存的模式并回填；
      如果你读取得比较慢，而这个回填动作发生在你点选【之后】，
      它就会把你刚选的模式悄悄改回上次的旧模式——于是界面显示的是
      你选的、实际执行的却是旧的（且因回填快慢不同而时对时错）。
      现在的做法是：一旦你手动点选过，任何"恢复旧偏好"的动作都会被
      直接拒绝（连内存里的决策值也不允许被回填覆盖），因此你的选择
      永远优先。如仍遇到，关掉弹窗重新打开一次即可。

  Q11：产品图压缩包里为什么是 编号_P1、_P2 这样的名字？
      v0.5.1 起统一改为这种命名：以产品编号打头，后面跟 _P1、
     _P2…（按官网 t1→tN 的原始顺序，从 1 起连续编号、不跳号）。
     这样文件名一眼可知属于哪个编号、是第几张，排序也整齐。
     压缩包内的扩展名沿用官网图片地址的后缀（多为 .png）。

  Q12：为什么有的编号显示「未发现产品图」？
     说明该编号在 TE 官网上确实没有产品图片（不是插件出错）。
     此时不能打包，按钮或提示位置会显示灰色文字「未发现产品图」。
     这与文档是否有图纸无关——有的编号有图纸但没产品图，
     有的编号有产品图但没图纸，都是正常现象。

  Q13：「下载全部产品图」按钮没有出现 / 变成了灰色？
     两种情况：
       ① 你在「设置 → 下载产品图」里选了
          「关联『下载全部文档』」——此时独立按钮会被隐藏，
          改为点「下载全部文档」时自动一并打包产品图。
          想让它出现，切回「独立按钮」即可。

       · v0.5.2.2 布局微调：
         独立模式按钮区为两行 —— 第一行「检索文档 | 清空」，
         第二行「下载全部文档 | 下载全部产品图」；
         关联模式为「检索文档 | 清空」+「下载全部文档（包含产品图）」独占一行。
       · 设置面板标题用色调整为亮橙（黄相更重），
         修正常见的"橙色目视像红色"的问题。
       ② 按钮显示「未发现产品图」并置灰——说明本次检索到的
          编号都没有产品图，无图可打包。

  Q14：产品图预览缩略图显示为空白或不见了？
     两种情况：
       ① 你在「设置 → 显示产品图预览」里选了「否」；
       ② 该图片临时加载失败（网络波动），插件会自动把它隐藏，
          不影响「下载产品图」功能，重试或重开弹窗即可。

  Q15：点击缩略图为什么不再直接打包下载 ZIP？
       v0.5.2 起，点击缩略图改为弹出灯箱查看该图完整版；
       想下载图片时在灯箱内点「下载此图」（只下载这一张，
       自动归档到该编号文件夹，命名 编号_P序号）。
       打包整包请用「下载产品图(N张/ZIP)」按钮或
       「下载全部产品图」。批量按钮下载成功后会置灰冻结，
       下次检索或点「清空」后恢复。

  Q16：打开插件就弹出一个白色方块（图片处显示"产品图"占位、
       还有个「下载此图」按钮），还关不掉？
       这是 v0.5.2 的一个缺陷，v0.5.2.1 已修复。
       原因：产品图灯箱自身用了 ID 级样式声明 display，优先级
       高于通用的 .hidden 隐藏规则，导致"该隐藏却没隐藏"，
       灯箱从弹窗打开起就常驻在界面上。
       修复：给 .hidden 加 !important（隐藏语义最高优先），
       并给灯箱补一条显式隐藏规则，今后同类问题不会再出现。
       如果你遇到该现象，请把插件更新到 v0.5.2.1 或更高版本。
     缩略图用的是官网最轻的图片版本（约 1.9 KB），
     不会明显影响弹窗速度。

  Q17：为什么关闭插件再打开，上次搜到的东西还会在？怎么彻底清掉？
       （v0.5.3 新增功能）这是有意设计的。
       以前只要鼠标点到弹窗外面的空白处，弹窗就会关闭，再打开时
       上一次的结果全部消失，需要重新输编号、重新检索一遍，很麻烦。
       v0.5.3 起，插件会把"上一次的检索画面"临时记在浏览器的
       会话内存里（chrome.storage.session），所以你再次打开弹窗时
       会自动把上次的结果、输入框内容、按钮状态原样恢复，
       并在状态栏提示一句「已恢复上次检索结果」。
       想真正清空时，点界面上的「清空」按钮即可 —— 它会同时
       清掉画面和这份临时记忆，之后再打开就是干净的空白界面。
       两点补充说明：
       · 这份记忆只存在"本次浏览器会话"里，浏览器一关就自动消失，
         不会长期占用磁盘，也不会跨浏览器重启复活；
       · 恢复画面不需要联网（检索结果是本地缓存的），断网也能看到
         上次的结果列表（但点下载仍需联网）。

  Q18：恢复上次结果时，会不会盖掉我正在操作的内容？
       不会。插件带了"用户操作守卫"：如果在你打开弹窗后、恢复动作
       落地前，你已经自己点了「检索文档」或「清空」，插件会放弃
       这次恢复，绝不覆盖你刚做的事。

  Q19：「下载产品图数量」的「首张」和「全部」到底有什么区别？
       这是 v0.5.4 新增的设置，默认是「首张」。
       · 首张：每个产品编号只下载**第 1 张**产品图，而且**不打包**，
         直接下载一张图片文件，文件名就是「编号.扩展名」
         （例如 1488991-1.png），**不带 _P1 后缀**。
       · 全部：每个编号的全部产品图打包成一个压缩包，命名规则为
         PIC_<编号>.ZIP（例如 PIC_1488991-1.zip），
         包内文件名为 编号_P1、_P2…（连续编号）。
       该设置会同时作用于两个批量入口：
         「下载全部产品图」按钮 和
         「下载全部文档和产品图」按钮（集成模式）。
       注意：无论选「首张」还是「全部」，在放大图灯箱里点
       「下载产品图(ZIP)」时**始终是压缩包**（这是刻意保留的，
       方便对某一个编号整包下载）。

  Q20：为什么按钮上的文字带了括号数字？
       这是 v0.5.4 的新提示，方便你下载前就知道量级：
       · 独立按钮模式：「下载全部文档（3 份）」——括号里是
         本次检索到的文档总数；
       · 集成按钮模式：「下载全部文档和产品图（文档3份/图片5张）」
         ——同时给出文档份数与产品图张数。

  Q21：放大产品图后，能看这个编号的其他图片吗？
       可以。v0.5.4 起，点击缩略图进入放大视图后：
       · 图片左右两侧各有一个「‹」「›」按钮，点击可切换上一张/下一张；
       · 也可以直接用键盘的 ← / → 方向键切换；
       · 标题会显示「编号 · 第 n / N 张产品图」；
       · 点「下载此图」会下载**当前显示的这一张**，
         文件名保留序号后缀（编号_P1、编号_P2…），不打包；
       · 点右侧的「下载产品图(ZIP · N张)」则把该编号的全部产品图
         打包为 PIC_<编号>.ZIP。
       （卡片上的「下载产品图(N张/ZIP)」按钮已在 v0.5.4 移入放大视图，
         卡片区更简洁；卡片内只保留缩略图 + 无图时的灰字提示。）

  Q26：浏览器启动时弹出「无法加载该扩展 …清单文件丢失或不可读取」？
       （配图见下载中心网页版「② 安装到浏览器」板块）
       · 现象：Edge/Chrome 启动时弹出系统窗口，内容类似：
         「无法从以下源加载扩展: C:\Program Files (x86)\Microsoft\
         Edge\Application\<版本号>\extension. 清单文件丢失或不可读取」
       · 原因：浏览器收到了一个空的或无效的「加载扩展」启动参数
         （--load-extension）。路径失效后，浏览器把它解析到自己程序
         目录下的 extension 文件夹，那里没有插件清单文件，于是报错。
         这与 TE 插件无关——TE 插件是从你自己选择的文件夹加载的，
         在扩展页里能看到它正常启用。
       · 处理：点「确定」关闭即可，不影响任何功能。
         若每次正常启动浏览器都反复出现：
         1) 右键浏览器快捷方式 → 属性 → 检查「目标」末尾是否被附加
            了 --load-extension 字样，有则删除；
         2) 打开 edge://extensions，查看是否有「已损坏/无法加载」的
            条目，将其移除。
       · 顺带说明：批量下载时浏览器顶部可能出现「是否允许下载多个
         文件」的提示条，这是浏览器对网站的安全确认，点一次「允许」
         后同一站点一般不再询问，同样与本插件的功能无关。

  Q25：产品编号查不到（比如提示 HTTP 404）怎么办？现在会自动再试一次吗？
       · 会。v0.5.7 起，凡是检索失败的编号（比如产品页不存在、网络异常），
         插件都会自动进入「二次检索」：把编号按"掐头去尾"规则换算成文档编号，
         再到官网「按文档编号搜索」通道找一次。
       · 换算规则（以 "-" 为界）：
         - 1743793-3（两段）→ 取第一段 → 1743793
         - 1-1241438-1（三段）→ 掐头去尾取中间 → 1241438
         - 1241438（本身没有 "-"）→ 无需换算，直接检索
       · 二次检索命中 → 正常出结果卡片（不再显示红色"检索失败"），
         下载的文件也归档到你输入的原编号文件夹里；
       · 二次检索也没找到 → 才按原样显示失败原因。
       · 注意：以 108-/114-/501-/411- 开头走文档通道的编号本身失败时
         不会再套一层二次检索。
  Q24：放大视图里，为什么以前只有第 1 张清晰、第 2 张之后发虚？（已修复）
       · 现象：点开产品图放大后，第 1 张很清楚，往后翻的第 2、3、4… 张明显糊。
       · 原因：官网产品页对第 1 张图给出的是"高清版"（2880×2160），
         但对第 2 张及之后只给出"缩略版"（只有 100×75 像素）。
         放大视图把小缩略图等比拉伸到全屏大小，像素不够自然就发虚。
       · v0.5.6 修法：插件把图片地址里的"版本段"统一改写成高清版地址
         （实测每一张都能取到 2880×2160 的原图），放大时优先加载高清原图；
         为保证打开瞬间就有画面，先显示小图占位，高清图加载完成后再无缝替换。
         另外增加了"帧令牌"保护：快速左右连续切换时，晚到的高清图不会错写到
         当前这一张上（杜绝串图）。
       · 附带好处：这条高清通道也用于"首张直下"和"打包下载"，所以
         你下载到本地的产品图同样是最清晰的版本（不再是 100×75 的小图）。
       · 小提示：高清原图单张约 55~250 KB，首次加载会比小图稍慢一点点，
         但一经缓存后续翻页都是秒出。
  Q23：弹窗可以调大吗？为什么放大页的左右切换按钮以前会跑出窗口？
       · 弹窗尺寸上限：浏览器对插件弹窗（Manifest V3）强制限制最大 800×600 像素，
         插件无法突破。v0.5.5 已把弹窗宽度由 380px 加宽到 520px，并设置高度上限
         580px（内容多时在弹窗内滚动），加宽与加长同时生效，整体比例更协调、不再显得"扁"。
       · 切换按钮跑出窗口的原因：放大视图里"左按钮 + 间隙 + 图片300px + 间隙 + 右按钮"
         共需 368px，而旧弹窗宽 380px 减去遮罩内边距只剩 352px，右侧按钮就被挤出去了。
       · v0.5.5 修法：切换按钮改为固定在遮罩左右两侧（不再参与宽度分配），
         中间的图片显示框自动占满剩余空间；图片改用等比缩放（contain）填满显示框。
       · 副作用（好的）：第 2 张及之后的产品图过去因为原图较小而显示得偏小，
         现在统一按显示框等比放大，和首张一样大。
  Q22：下载按钮上的「组」是什么意思？按钮字样会变吗？
       v0.5.5 起，下载按钮的字样会跟随「下载产品图数量」设置自动变化：
       · 独立按钮：
         - 选「首张」→「下载首张产品图（N 组）」
         - 选「全部」→「下载全部产品图（M 张/N 组）」
       · 集成按钮（下载全部文档和产品图）：
         - 选「首张」→「下载全部文档和产品图（文档X份/N组+图片N组）」
         - 选「全部」→「下载全部文档和产品图（文档X份&图片M张/N组）」
       其中「N 组」= 本次检索结果里有产品图的编号个数（一个编号算一组）。
       切换设置后按钮字样会立即刷新，不用重新检索。
       另外，顶部提示语已改为「输入产品编号/文档编号」。

  Q27：CAD文件(STP) 下载下来是个压缩包（.3d_stp.zip），能不能自动解压、只留里面的文件？
       · 能，而且默认就开。v0.5.8 起，设置页（位于「显示产品图预览」下方）新增
         「解压CAD文件STP：是 / 否」，默认「是」。
       · 效果：下载 CAD 文档时，插件会把压缩包里的 .stp 等文件直接解压到
         「下载目录\TE Web Download\<编号>\」文件夹下，你看到的只有解压后的文件，
         **原始压缩包不会出现在磁盘上**。
       · 为什么是"压缩包不落地"而不是"下载后再删除"？
         - MV3 扩展没有磁盘文件"读取/删除"权限：chrome.downloads 只能写文件，
           不能读、更不能删已经落盘的文件。所以"先下载 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 不受影响；「下载全部文档」批量下载也走同一规则。
       · 想关掉？把设置切到「否」即可，恢复成以前"下载整个 zip 包"的行为。

  Q28：点卡片上的「全部下载（N 份）」按钮，结果同一个编号被拆成了好几个文件夹（比如 1897009-2、1897009-2 (1)、1897009-2 (2)），怎么办？
       · 这是老版本（v0.5.8 及更早）的 bug，v0.5.9 已修复。
       · 原因：卡片上的「全部下载」按钮原本是"用 setTimeout 每隔 600ms 模拟点一次单文档下载"，
         每次单击都各自独立去判断"该存到哪个文件夹"。而文件夹判断内部有一次磁盘探测（要等约 1.8 秒
         确认文件夹确实收敛），点击间隔（600ms）远小于探测窗口，于是 3 次点击几乎同时发起、各自重新
         决策，按完成先后分别定成了「纯编号 / (1) / (2)」—— 也就是你看到的 3 个文件夹。
         （顶部「下载全部文档和产品图」按钮因为每编号只决策一次，所以不受影响。）
       · 修复（双保险）：
         ① 卡片按钮改为"先按编号决策一次文件夹，再把同一个文件夹复用给这 N 份文档"，
            不再用 setTimeout 模拟单击，彻底对齐顶部按钮的做法；
         ② 同时在 getFolderName 内部加了"同编号并发合并"：同一个编号的多次并发调用会合并到同一次
            磁盘探测、共享同一个结果，从根上消灭这一类"并发抢文件夹"的竞态。
       · 验证：verify_v054.js 已扩到 169 项（新增第 18 章，含"同编号并发 3 次只触发 1 次磁盘探测"等断言）；
         并用真实 Edge + 真实 MV3 插件做端到端验证——注入含 3 份文档的卡片、点「全部下载」，
         捕获实际落盘路径，确认 3 份文件全部归入同一个文件夹（TE Web Download/1897009-2/）。

  Q29：插件是怎么"看懂"图纸右下角图框的？图纸还没下载到本地也能读？为什么我这边一个规格都没被过滤掉？
       · 能读，而且**不需要先把图纸下载到本地**。
         v0.6.0 起，插件在"检索到文档之后、你点下载之前"，
         就已经在后台把产品图纸的 PDF 取回来读了一遍 ——
         全程只在内存里处理，**不会在你的磁盘上留下任何临时文件**。
       · 为什么能读：TE 的图纸 PDF 里，图框的 PRODUCT SPEC /
         APPLICATION SPEC 这两行是**文字层**（不是扫描图片），
         所以可以直接把文字连同坐标一起提出来。
         - 解压：PDF 内容流是 FlateDecode 压缩的，用浏览器自带的
           DecompressionStream（Edge 154 原生支持）即可解开，
           和 v0.5.8 解 CAD 压缩包一样**零第三方库**，插件体积几乎不变。
         - 定位：图框是"标签一行、值一行"的两段式表格，光把文字拼成一行
           是找不出对应关系的（中间隔着几百个其它文字）。所以插件是
           **带坐标**提取的：先找到整格内容正好是 "PRODUCT SPEC" 的那一格，
           再取它**正下方最近**的那一格（纵向间距 3~150、横向偏移 ≤90），
           从那一格里把编号全部抓出来。没有下方候选时，才退一步取同一行右侧。
           这些窗口数值是用真实图纸 5-928999-1 实测校准的
           （实测纵向间距 17.29、横向偏移 14.05）。
         - 编号边界：TE 的规格文件名是 ENG_SS_108-18030_A.pdf 这种，
           下划线也算"单词字符"，用常规的 \b 词边界会匹配不上，
           所以改用前后断言"左边不是数字、右边也不是数字"，
           既能认出 _108-18030，又能挡住 1108-12345 这类假编号。
         - 标签用**整格匹配**（整格内容必须是 PRODUCT SPEC 或
           APPLICATION SPEC，允许末尾一个点），避免正文里出现的
           "application spec." 被误当成图框。
       · 一个都没被过滤掉，通常是这几种情况（按概率从高到低）：
         ① 你没勾「产品规格」→ 本功能根本不会启动（按设计如此）；
         ② 这个编号没有产品图纸 → 无从读图框，规格原样全列；
         ③ 触发时机选了「下载全部文档」→ 检索时本来就不过滤，
            要点「下载全部文档」那一刻才筛（这是正常的）；
         ④ 该图纸的图框是扫描件/纯图片 → 没有文字层，读不出编号；
         ⑤ 检索结果里的规格文档编号，确实没有一个出现在图框里
            → 说明官网挂的规格和图框印的不是同一批，属实情。
         想确认到底读到了什么：把设置切成「追加显示」再检索一次，
         能看到被补出来的规格，就说明图框读到了。
       · 代价与风险（都可控）：① 每个编号会多花一次图纸下载
         （同一张图纸只解析一次、结果有缓存，多个规格不重复下载）；
         ② PDF 超过 16MB 或内容流超过 80 段会主动放弃，避免大件拖慢；
         ③ 依赖你在浏览器里的 TE 登录态去取 PDF（与点下载按钮是同一套
            cookie）；④ 任何一步失败都**静默降级**——规格原样列出，
           绝不报错、绝不中断检索。
       · 验证：verify_v054.js 已扩到 237 项（新增第 19 章 68 项，含真实
         图纸 5-928999-1 的三条命中、合成 PDF 的两段式/明文/无标签三种
         版式、坐标配对的 6 个边界、只过滤产品规格不动其它类型、
         多值全查、标记渲染保留「文档编号」来源、下载全部文档模式跳过
         未命中、缓存只解析一次、失败静默）；并用真实 Edge + 真实 MV3
         插件做端到端验证（diag_spec_ui_v060.js，19 项全通过）——
         确认新板块真实可见、位置在「解压CAD文件STP」下方、默认勾选
         「图纸编号 / 检索文档」、切换后正确落库、关掉弹窗重开依然回显，
         且用户手动选过之后不会被迟到的异步恢复覆盖。

  Q30：官网明明有产品图，插件却显示「未发现产品图」（如 1534334-1），为什么？现在怎么处理的？
       · 已修复于 **v0.6.1**。这是老版本（v0.6.0 及更早）的漏抓 bug。
       · 【Bug 原因】插件从 v0.5.0 起认定「产品图」只有一种长相：
           /content/dam/te-com/catalog/part/<路径>/<编号>-tN.jpg/jcr:content/renditions/product-*.png
         也就是**按料号归档的专属 DAM 图**（样本 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 双路取样，2026-10-12）
         ① 用与插件完全相同的 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、文档与规格解析正常 → 不是网络/登录态问题。
       · 【修复方向（v0.6.1 采用，刻意保守）】
         **仅在「专属 DAM 图一张都没有」时才启用兜底，且最多取 1 张**：
           ① 优先取页面 <img> 里的 /catalog/common/images/PartImages/*.jpg|png；
           ② 再取 JSON-LD `Product.image`（<img> 缺失时的兜底，最权威）；
           ③ 排除官网占位图 no-image-available.jpg、排除裸域名等空壳值、
              排除 JSON-LD 非法 JSON（不崩）。
         为什么只在"无专属图"时才用？因为有专属图的料号，页面上还挂着
         "系列/相关产品"的共享图（如 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 不崩）；
         真实 Edge 端到端（diag_img1534_v061.js）**5 项全通过** —— 实际检索
         1534334-1，状态栏报「1 个编号有产品图（共 1 张）」、卡片渲染出缩略图、
         不再显示「未发现产品图」、按钮变为「下载首张产品图（1 组）」。

  Q31：同一料号有多份产品图纸，为什么有的编号识别不到规格？又为什么有时显示"全部语言版本"还带黄底提示？
       · 已新增/修复于 **v0.6.2**。
       · 【背景】很多料号在官网上挂了多份产品图纸（如 7-1452668-3 同时挂了德文版
         GER_CD_1452668_A3.pdf 与英文版 ENG_CD_1452674_C7.pdf）。旧版只会取"第一张"
         （德语版）去读图框，而那份图框里恰好没印规格编号 → 识别落空、你以为插件坏了。
       · 【根因】① 识别目标取"第一张"而非"按语言优先"——第一张恰好是没编号的
         德语版；② 更深层：这两份图纸都没有**文字层**——德语版是 CCITT 扫描件、
         英文版是 Pro/ENGINEER 导出后 Ghostscript 重打的纯矢量 PDF（BT/Tf/Tj 全为 0，
         文字被转成曲线轮廓）。程序读的是 PDF 文本层，两种都读不到 → 不是语言问题，
         而是"图纸本身没有文字"；③ 实测该料号还有一张 TIF 版图纸
         （GER_CD_1452668.tif），但它是内嵌 CCITT 传真图像的 PDF、同样没有文字层。
       · 【修复方向（v0.6.2 采用）】
         ① 新增设置项「产品图纸语言」（英文/德语/全部，默认英文）：
            检索时只显示所选语言的图纸；但识别图框的目标图纸恒按
            英文→中文→德语→最后一张 优先取用（英文优先、读不出自动换下一张）。
         ② 识别兜底链：PDF 链（英文→中文→德语→最后一张）全读不出 → 再试 TIF 版
            图纸（英文优先）——TIF 也读不出（或根本没有 TIF）时，不再丢弃任何产品
            规格，而是**直接显示全部语言版本的图纸与规格**，并在状态栏黄底提示原因，
            请你手动核对图框。
         ③ 只要任一环节读出了编号，就照常"按编号过滤/补全规格"，并只在所选语言内显示。
       · 【★ 已知限制】TIF 版图纸官方同样没有提供可解析文字层时，灯箱/放大与 PDF
         同理受限于官网原图；插件已尽力"PDF 链 + TIF"双兜底，仍读不出即如实告知、
         转人工核对，不谎报、不漏显。
       · 【验证】verify_v054.js 扩到 **354 项**（新增第 21 章：drawingLangOf 归类、
         pickSpecTargetChain 优先级链、filterDrawingsByLang 显示筛选、resolveSpecTarget
         含 TIF 兜底、getSpecLang/saveSpecLang 持久化与守卫、未命中提示与"显示全部"分支）；
         真实 Edge 端到端（diag_tif_v062.js）**24 项全通过** —— 实测 7-1452668-3 在
         lang=en 下 PDF 链+TIF 全读不出 → 自动回退显示德语+英文两张图纸、黄底提示
         "已为你显示全部语言版本"并说明已尝试 TIF；对照料号 5-928999-1（有文字层）
         识别成功、绿底 ok。

  Q32：「更新」按钮是怎么工作的？为什么首次更新要做一次"迁移"？
       · 已新增于 **v0.6.3**（就地更新，方案B）。
       · 【三条浏览器硬边界】（任何扩展都绕不过，是 Chromium/Edge 安全模型的刻意设计）：
         ① 无法程序化「加载解压缩的扩展」——加载未打包扩展必须人在扩展管理页
            点击并选择文件夹；扩展没有任何 API 能替你做（developerPrivate 接口
            只对浏览器内部页面开放）。
         ② 无法程序化固定/取消固定工具栏图标——图标固定状态没有公开 API，
            只有企业策略（注册表 ExtensionInstallForcelist，需管理员）能强制固定。
         ③ 删除扩展必弹一次确认框——chrome.management.uninstall 无法静默删除。
       · 【四个方案对比】（为什么选 B）：
         方案A 贴合原话（下载 zip→解压成新文件夹→人工加载→人工换固定→自动卸旧版）：
            完全对应原始设想，但每次更新产生**新扩展 id**（解包扩展的 id 由加载
            路径决定），工具栏固定每次都要重做；且硬边界①②③全部撞上，每次
            更新 2 步必须人工。
         方案B 就地更新（已采用）：插件加载目录固定为
            「下载\TE插件更新\current\extension」，更新时直接重建该目录文件后
            调 chrome.runtime.reload() 自动刷新——id 不变、固定不丢、零人工；
            代价是首次启用要做一次迁移（撞一次硬边界①，此后永远不再）。
         方案C Edge 加载项商店：浏览器原生自动更新最可靠，但每个版本都要过
            微软审核（通常数天），与"当天迭代当天发布"节奏冲突。
         方案D Native Messaging 本地更新器：真正全自动还能写任意目录，但要装
            注册表宿主（SmartScreen/杀软常告警）、维护成本最高，不采用。
       · 【更新流程（方案B 实际执行）】点「更新」→ 读云端
         download/latest/version.txt 与本地 manifest 版本做语义化比较：
           · 一致 → 提示「版本号已经是最新版本，请人工核验」；
           · 云端更低 → 提示无需更新；
           · 云端更高 → 下载对应版本 zip（内存中解压，不落盘临时文件）→
             校验包内含 manifest.json、拒绝路径穿越 → 逐文件**覆盖写入**
             「下载\TE插件更新\current\extension\」→ 登记更新意向 →
             chrome.runtime.reload() 自动刷新 → 刷新后自检对账：
             版本已变 = 更新成功（绿字横幅）；版本没变 = 当前插件仍从旧目录
             加载，给出一次性迁移引导（琥珀色横幅，写明三步操作）。
       · 【overwrite 铁律例外 · 利弊分析（v0.6.3 用户批准）】
         铁律「永不使用 conflictAction:"overwrite"」的本意是**绝不覆盖你的
         业务文档**（v0.4.3 确立）。方案B 要把新版文件写进固定目录，同名
         文件必须覆盖，否则会堆出「popup (1).js」这类副本直接毁掉扩展文件夹。
         · 同意例外（已采用）：实现简单可靠、无残留副本、不受"清空下载历史"
           影响。缓解措施：例外被**硬编码收窄**——全插件只有一个入口
           downloadOverwrite()，路径必须位于「TE插件更新/current/extension/」
           之下否则直接拒绝；后台 service worker 侧再做一次同样的白名单校验
           双保险。该目录里只有插件自己的程序文件，不存在误删用户数据的风险。
         · 备选"先删后下"（未采用）：更新前用 downloads.search 找旧文件逐个
           removeFile 再下载——铁律字面不动，但用户清过下载历史就找不到旧
           文件、冲突照旧发生，多两个失败点、多约 60 行代码。
         · 配套硬性保障（用户要求）：不论什么时候，只要触发了
           conflictAction:"overwrite"，就必然调用 recordOverwrite() 在弹窗
           **最顶部**显示红底横幅「已覆盖写入 N 个文件：…」，记录持久保存在
           chrome.storage.local，点「知道了，清除提示」才清除——"触发 overwrite"
           与"必然提示"在代码结构上强绑定（静态断言守护：可执行代码中
           conflictAction:"overwrite" 字面量仅允许出现 1 处）。
       · 【防干涉】文档保存路径（默认 TE Web Download）与插件更新目录
         （TE插件更新）互不干涉：设置里输入「TE插件更新」会被拒绝并红字提示；
         历史存量冲突值自动回退默认；更新流程启动前再做一次防御校验。
       · 【验证】verify_v054.js 扩到 **410 项**（新增第 22 章 41 项：semver
         三态比较、防干涉六场景、overwrite 白名单六场景、downloadOverwrite
         越界拒绝/命中记录/置顶横幅/清除按钮、overwrite 字面量唯一入口、
         prepareUpdateFiles 剥壳与防穿越、runUpdate 三态分支全链路、
         checkUpdatePending 成功/迁移引导两分支）。真实 Edge 端到端实测
         中发现「.js 文件写入挂起」问题，已在 v0.6.4 修复加固（详见 Q33）。


  Q33：（v0.6.4）为什么之前「更新」会卡住？这次改了什么？
  ----------------------------------------------------------------
  【现象】v0.6.3 真机实测中，「更新」有时卡在「写入文件 1/11」
       长时间不动。排查确认：更新包第一个文件恰好是 background.js，
       而插件写 **.js 文件**时，下载可能既不发「完成」事件、查询
       状态也长时间停在「进行中」——浏览器会把会话内已经下载过
       文件之后又发起的 .js 下载拦为「待确认」。.txt/.json/.css/
       .html/.png 均正常。
  【修复（四重保障）】
       1) 完成判定改三通道：事件 + 每 0.5 秒轮询 + 「已接收字节
          追平总字节（连续两拍）即视为落盘成功」，状态事件永远
          不来也能收口；
       2) 45 秒仍无结果 → 自动换新链接重试一次（覆盖写入幂等，
          重试无副作用）；重试再失败才明确报错，绝不永久卡死；
       3) .js 文件提前写入（实测会话内第一次下载最稳）；
       4) 失败提示指引用户：打开浏览器「下载内容」(Ctrl+J)，
          看是否有被拦截待确认的 .js 文件并点「保留」，再点更新重试。
  【v0.6.4 界面调整】「更新」按钮移到「设置」上方（灰底橙字）；
       设置页「产品图纸识别规格编号」的下载筛选/触发时机归为一组
       并更新文案；「产品图纸语言版本筛选」（优先英文/优先德语）。
  【验证】verify_v054.js 扩到 **425 项**（新增 22.1b/22.1c：按钮
       位置与灰底橙字、分组无缝隙、新文案；数据落盘判定、自动
       重试、明确失败收口、.js 提前写入；两条行为测试验证
       「事件通道失效时仍能正确收口」）。


----------------------------------------------------------------
五、小提醒
----------------------------------------------------------------
  - 每次检索请尽量“少量、正常速度”，不要一次粘几百个编号
    猛刷，避免被网站临时限流。
  - 本插件只在你自己的浏览器里工作，不会把你的数据上传
    到任何服务器，可以放心使用。
  - 请遵守目标网站的使用条款，低频、合理使用。

祝你使用顺利！
