# ShuTuMap 0.21 测试版 by豹子头没充 适用于电脑端 Chrome / Edge 的微信读书网页版 https://weread.qq.com/ 。不是微信手机 App 内的插件。 ## 0.21 测试版 地图底图与在线地名查询改经 ShuTu 服务器中转,用户无需另行配置代理。服务器对外连接由节点健康检测与故障切换维护。新增服务器域名访问权限;只发送待查地名及当前视野所需的地图瓦片坐标,不上传书摘和笔记。 更新方式:把新版文件覆盖到原来的 ShuTuMap 安装目录,进入扩展管理页点击刷新,并确认服务器域名访问权限,再刷新微信读书页面。不要卸载旧插件,也不要换安装目录。 ## 0.2 测试版 基于 0.1.30 整理发布,本次更新插件名称、创作者署名、版本标识和发布说明,功能保持不变。 首次安装:解压 `ShuTuMap-0.21.zip` 到一个长期保留的文件夹,在 Chrome / Edge 扩展管理页开启「开发者模式」,选择「加载已解压的扩展程序」,选中解压后的 `ShuTuMap` 文件夹(其中包含 `manifest.json`),然后刷新微信读书页面。无需运行构建命令。 已有用户:将 ZIP 内 `ShuTuMap` 文件夹中的文件覆盖到原安装目录,在扩展管理页刷新插件,再刷新阅读页;不要卸载旧插件或改用新的安装目录,以保留扩展身份和本地摘录。 测试时请重点体验划词标记、地点搜索、地图展开与收起、拖动和刷新后恢复、查看原文及返回。反馈问题时请附浏览器版本、书名、复现步骤和截图,避免包含私人摘录。 以下为历史开发记录,其中提到的验证结果属于对应历史版本,不代表本次重新完成了这些验证。 ## 0.1.28 核对并恢复 0.1.21 的跳转重试规则 核对 0.1.21 的加载稳定性记录后,发现后续定位校验把“原生跳转已调用、但未确认目标显示”设为了可重试,会再次执行原生跳转。现恢复为仅在阅读器缺失或明确处于 LOADING / PRERENDER 时等待重试;一旦发出原生跳转,校验失败直接结束,不再次发出跳转。 同章 URL 忽略 query/hash、重复点击合并、最多六次未就绪重试、按需查找阅读器和修订号未变不重建标记等原修复仍保留。保留 0.1.27 的底图复用、42px 顶栏和坐标单行显示。 自动回归验证加载等待不会发出跳转、定位校验失败不允许再次跳转。同用户实际页面的反复加载现象是否完全一致,仍待实页验证。 ## 0.1.22 画布原文跳转与海报式地图 移除“捕获当前返回点失败就拒绝查看原文”的前置判断;双栏画布没有可见 DOM、页面坐标为 0 时仍可继续跳转。原生捕获优先使用阅读进度偏移,失败则尝试当前可见文字对象;原生目标定位不再依赖另一次进度计算。确实缺失返回偏移时保存页面及滚动坐标,返回时只报告返回页面,不声称精确恢复双栏页码。 地图改为浅纸色海报样式,顶部标题区与地图平滑衔接,只保留顶部外框线,移除地图内框、底部装饰和罗盘。检索、全部地点、关闭入口保留。标题按视野中心显示宽泛地理大区及坐标,使用东亚、地中海地区、西亚、西北欧等地理称呼,不作国家归属判定。区域为粗略经纬度范围,不是精确边界数据库;底图本身沿用 OpenStreetMap 标注。 新增画布滚动为零且捕获失败仍能跳原文、当前文字偏移后备、无需进度计算即可定位,以及地理大区标题检查;完整自动回归通过。浏览器验证页已目测新版地图样式。尚未在登录后的微信读书页面验证精确原文跳转。 ## 0.1.21 原文定位兼容与加载稳定性 旧摘录缺少偏移时,尝试通过保留的真实段落标记恢复原文位置,或在原生画布文字对象中查找唯一文本并使用原生跳转高亮;重复文本不随意定位。同章跳转忽略查询参数及 hash 差异,避免为进度或主题参数变化重新加载页面。重复点击合并处理。 只对阅读器未就绪重试,最多六次;不可匹配的原文直接结束,避免不断尝试改变阅读位置。移除阅读组件的定时扫描,改为操作时获取;地图数据修订号不变时不重建标记。 完整自动回归通过,新增同章参数跳转不刷新、进度参数不重复定位、旧摘录偏移恢复、画布文本定位、重名拒绝、并发点击、加载重试上限及不重建标记验证。本轮未在登录后的微信读书页面实测,用户反馈的自行加载现象尚未确认所有触发原因。跨章节跳转仍需正常加载目标章节。 ## 0.1.20 大小地图位置联动 替换 0.1.19 的独立位置模式:小地图收在大地图靠近屏幕角落的那一角,而不是跳到屏幕边角。两种形态共用角落锚点;拖动小地图会同步改变大地图展开位置,拖动大地图后,下次收缩跟随新位置。位置及锚点一起保存,刷新后恢复,窗口始终限制在屏幕内。旧版独立小地图坐标不再使用。 四角锚点、画布区域对齐、小地图拖动后大地图跟随、展开收缩及刷新恢复、屏幕边界和完整回归通过。本轮浏览器操作被 Work 设置禁用,未完成新版实拖验证。 ## 0.1.19 小地图四角停靠与独立位置记忆 未手动调整小地图时,根据大地图中心所在的屏幕区域,收缩到最近的屏幕角落;顶部保留地图开关的空间。拖动小地图后单独保存其位置,再次展开、收起或刷新页面后优先回到调整后的位置。大地图的位置单独保留,屏幕变小时将窗口限制在可见范围。 四个角落、画布与鼠标区域对齐、大小地图位置隔离、展开收起、刷新恢复和屏幕边界检查通过。浏览器验证页已实际拖动大地图到左下方,确认收至左下角;再移动小地图并展开收起,确认保留手动位置。尚未在更新后的微信读书页面实测。 ## 0.1.18 修复普通拖动被取消 旧实现要求按住 300 毫秒后才能拖动,等待期间移动超过 10px 会取消手势,导致正常按下后立即拖动无效。现在拖动超过 4px 就立即开始移动,仍可按住后再拖。大地图从标题栏空白处拖动,圆形小地图从圆内拖动,松开后保存位置。 新增测试先复现旧版失败,再验证立即拖动及位置保存;完整回归通过。浏览器验证页已用实际鼠标分别拖动大地图和圆形小地图,确认窗口坐标改变;微信读书页面仍需更新扩展及刷新页面后生效。 ## 0.1.17 已标记地点检索与开关主题 地图顶栏下载按钮替换为检索按钮,可按本书已标记地点的名称或别名检索;重复标记合并显示次数,点击结果定位到地点并展开摘录。支持 Enter 选中首个结果、Esc 关闭检索,不请求在线地名服务。移除扩展的下载入口。 右上角地图开关改为日间浅灰、夜间深灰样式,移除金色边框和投影;跟随微信读书的主题类及页面背景变化自动更新。 地点检索、名称与别名匹配、重复地点合并、无结果、跨书隔离、定位及打开摘录,以及明暗切换回归通过。已在浏览器验证页目测检索窗及两种主题;尚未在更新后的微信读书页面实测。 ## 0.1.16 标记后显示小地图 地图原先未打开时,标记成功后直接显示圆形小地图,以刚保存的地点为中心;不会先缩放到全部地点。原先已打开时保持当前展示方式。0.1.15 已移除“选择地点即标记”和“当前仅引用划选文字”两行说明。 已通过隐藏地图转小地图、传递新地点坐标、不被全部地点视图覆盖,以及完整回归检查。 ## 0.1.14 整段摘录与紧凑地点选择 - 在画布阅读器清空预排版 DOM 之前,保留实际段落;复制选文时按原生文字偏移匹配,取得上下文后默认引用整段。缓存按章节 URL 隔离,重复地名不能确认原文位置时不随意猜段落;仍无法取得段落时明确显示“当前仅引用划选文字”。需要更新扩展并刷新阅读页,才能从本次排版开始保留段落。 - 未识别地点直接显示在线搜索结果;修改地名后自动搜索。段落缺失不再阻止在线搜索,也不再要求点选候选后重复点击“标记”。 - 选中候选即保存。旁注、文段设置默认折叠,手动落点和修改既有摘录仍保留明确保存按钮。 - 定位窗缩至约 302px 宽,采用暖纸色、细框与轻微叠纸阴影,列表收紧并保留滚动。 完整自动回归通过,覆盖预排版 DOM 清空后的段落保留、跨章节隔离、原生选区偏移、自动搜索、折叠旁注、候选点击直接保存和整段摘录。浏览器验证页已用真实在线搜索确认上述交互与整段保存;尚未在更新后的微信读书实际页面确认段落保留,页面内部结构变化时可能仍需适配。 ## 0.1.13 恢复原生复制取文 按用户确认,恢复 0.1.6 已正常工作的取文机制:点击原生菜单里的地图按钮后,调用原生“复制”,从复制流程接收选文,不再依赖阅读组件提前缓存选区。copy-bridge.js 与 0.1.6 完全相同。因此会像 0.1.6 一样把选文写入剪贴板,也可能显示微信读书的复制成功提示;正常的原生复制限制继续生效。 保留新版地图交互和阅读回跳。页面提供可匹配的段落时保留上下文;纯画布页面取不到段落时,显示“未取得段落,可重新划选整段”,可以划选整段后标记。原文偏移无法从旧复制流程取得时,阅读回跳按现有文本匹配机制处理,不保证短地名能精确定位。 已验证与 0.1.6 取文脚本逐字一致,并通过长葛选文、原生 input 复制、Clipboard API 复制、请求关联、受限/隐藏菜单和完整自动回归。新版本尚需刷新扩展及阅读页面后做实际划选验证。 更新时覆盖原插件文件夹,在扩展管理页刷新插件,再刷新微信读书页面;无需卸载。 ## 0.1.12 选文入口修复 从原生选文菜单入口直接捕获文字对象,修复已有划线导致跳过查询步骤时拿不到选文的问题;双栏模式也直接使用原生菜单提供的文字对象。保留可复制条件、段落及原文位置,不触发复制。回归测试先复现 0.1.11 失败,再验证修复。 更新时覆盖原插件文件夹,在扩展管理页刷新插件,再刷新微信读书页面;无需卸载。 ## 0.1.11 双栏划选适配 修复双栏阅读时有效划选仍提示「选区未就绪」:兼容原生菜单以文字对象数组表达可复制状态,以及双栏阅读组件不暴露取文方法的情况。继续保留段落与原文位置,不触发原生复制、不读写剪贴板。已用双栏组件形态复现旧版失败,并验证修复;尚未在登录后的微信读书页面实测。 更新时覆盖原插件文件夹,在扩展管理页刷新插件,再刷新微信读书页面;无需卸载。 ## 0.1.10 原文段落、紧凑定位浮卡与阅读回跳 - 划地名时,保留实际所在段落与相邻段落供选摘。优先用原生文字偏移匹配上下文,重复地名不随意猜段落;取不到上下文时展开确认面板,明确提示重新划整段,不默默当作完整原文。 - 定位面板收紧至约 344px,限制在地图内;顶部预览原文,搜索行内置搜索按钮并支持 Enter,候选用轻量列表。可直接标记时点击候选就保存,调整或手动落点时才显示保存按钮,选段与旁注会被保存。 - 新摘录保存章节 URL 与章节内文字偏移。点「原文」前先保存正在阅读的位置,跳到摘录处后显示「返回阅读处」。多次查看摘录保留最初的返回点,跨章节加载后按原生阅读偏移恢复;返回点按浏览器标签页隔离,保存在浏览器会话中。 - 旧版只有地名几个字的摘录不会被猜测改写,需要重新标记补全。旧摘录缺少文字偏移时尝试原章节中的唯一文本匹配,无法精确定位会提示,并保留返回入口。 验证覆盖段落提取与重名消歧、整段保存、原文偏移保存、跨章节跳转及返回、刷新后的恢复、多摘录往返、标签页隔离,以及原有交互。当前 Work 设置禁用了浏览器预览,未在登录后的微信读书页面完成实际联调;取选文、提取段落和恢复阅读位置均依赖其当前页面结构与阅读组件。 ## 0.1.9 直接取得选文与原生图标颜色 地图标记不再触发微信读书的复制操作,不读写剪贴板、不修改浏览器剪贴板接口,也不再产生复制成功提示。插件在原生划词菜单出现时保留这次选文,点击地图图标时使用它;无法取得选文时提示重新划选,不偷偷退回复制方案。沿用原生可复制条件,不处理受限选文。 地图图标颜色改为 rgb(229, 229, 229) / #E5E5E5,文字保持原生菜单样式。更新插件后务必刷新微信读书页,移除上一版已经注入的复制适配。 直接选文读取依赖微信读书当前阅读组件;网页改版可能需要更新适配。已检查选文读取、正常原生方法调用、无剪贴板写入及失效/受限选区拒绝;尚未在登录后的微信读书页面真机联调。 ## 0.1.8 文段操作裁切修复 「···」改为在当前文段下方展开紧凑操作条,完整显示「调整 / 删除 / 来源」。操作条参与布局,不再向上悬浮而被文段滚动区域裁切;展开时更新地标面板尺寸,必要时滚动文段列表以露出全部操作。收起后恢复面板大小。 已通过操作条展开、收起、三个操作保留、滚动露出及面板尺寸更新的逻辑检查。未完成浏览器视觉验证。 ## 0.1.7 收拢动画重做 取消宽高各自变化的缩小方式。地图画布保持原尺寸,通过同一等比例变换与圆角裁切,在 0.44 秒内连续收进 148px 圆窗。外环固定为正圆,仅在收拢末段淡入;随后整张小地图降低透明度。地图、裁切和圆环不再分别移位缩放。展开反向连续过渡,可在途中反转;系统启用减少动态效果时直接切换。 检查覆盖宽窗、长窗和拖动改大小后的圆窗中心、半径及落点几何,以及原有拖移、收拢、原生菜单逻辑。当前 Work 设置禁用了浏览器预览,本轮未目测实际动画。 ## 0.1.6 点击地图外收成小地图 地图展开时,点击阅读页立即使用同一收拢动画变成圆形小地图,不等待 5 秒。阅读页原本的点击操作照常生效;插件按钮、地标面板、拖移与调整大小不会被误判。鼠标移入小地图仍可展开。 ## 0.1.5 打开时显示全部地点 每次通过 M、地图按钮重新打开地图,以及从圆形小地图展开时,自动执行「全部地点」,将当前书全部已标记地点纳入视野。没有标记时恢复默认地图视角。 ## 0.1.4 窗口拖移 长按地图顶栏空白位置或圆形小地图约 0.3 秒,即可拖动整个窗口。松手后按浏览器保存位置;窗口限制在屏幕内。顶栏按钮仍保持原功能。 小地图悬停展开有 0.32 秒短暂延迟,用于区分悬停查看和按住拖移;拖动期间不展开、不触发闲置收拢。松手且鼠标仍停留时稍后展开。缩放大小和移动位置是独立操作。 已通过长按拖移、短按取消、拖动期间不展开/收拢、位置保存检查。本轮没有浏览器真机视觉验证。 ## 0.1.3 原生划词菜单 划词后,直接使用微信读书原菜单中的地图图标。图标下方显示「地图」,悬停说明和无障碍名称为「地图标记」。沿用原菜单的字体、间距与主题配色,不再显示单独的标记条。 一键标记已识别地点;有歧义时展开候选地点。从 0.1.9 起直接读取原生选文,不调用复制功能。菜单重绘后会自动恢复地图入口,重复扫描不会重复插入按钮。 ## 0.1.2 交互更新 地图边缘拖拽热区加宽,左下角热区 44×44,位于地图内容之上,不受边框显隐影响。拖动期间停止闲置计时。 鼠标离开地图 5 秒后,约 0.4 秒收成 148px 圆形小地图,随后降低透明度;保留地图及地标,细金属环、北向标和 OSM 署名。移入立即激活并展开,恢复用户调整过的尺寸。减少动态效果系统设置下直接切换状态。 状态测试涵盖 5 秒收拢、悬停恢复、拖动中不收拢、尺寸保存恢复;本轮浏览器预览被 Work 设置禁用,未目测动画。 ## 从旧版更新 不要卸载旧插件。把新 ZIP 解压并覆盖到之前「加载已解压的扩展程序」所选的同一目录,然后在扩展管理页点击该插件的刷新按钮,最后刷新微信读书页。保持同一目录可保持原扩展身份和本地摘录。 0.1.1 将地图从扩展 iframe 改为阅读页内的隔离组件,地图图片按网页来源发送正常请求;保留 OSM 署名、浏览器缓存,收起地图时停止请求底图。不伪造来源、不通过代理绕过服务限制。 ## 安装 1. 将 ZIP 解压到一个保留的文件夹。 2. Chrome 打开 chrome://extensions;Edge 打开 edge://extensions。 3. 开启「开发者模式」→「加载已解压的扩展程序」→ 选择含 manifest.json 的文件夹。 4. 刷新微信读书,打开一本书。 ## 使用 - 划选地名或文段 → 原生菜单「地图」(地图标记)。已识别地点直接保存;不确定时选择候选。 - 地点不确定时选择候选或「落点」;已存文段可通过地标面板「···」→「调整」修改。 - M / 右上角小图标:展开或收起地图;Esc 返回。 - 点地标查看文段;「+摘录」后划选任意文字,将它附加到该地点。 - 点「原文」定位摘录,再用顶部「返回阅读处」回到刚才的章节与阅读位置。 - 地标显示首字。第二次标记颜色加深,第三次保留等级,贴纸暂未实现。 - 长按顶栏或圆形小地图拖移窗口;左边、下边、左下角拖动调大小,左下角也支持方向键。 - 鼠标进入才显示顶栏和边框;离开 5 秒后收成半透明圆形小地图,移入恢复原尺寸。 - 地图顶栏放大镜检索当前书已标记的地点。摘录保存在此浏览器,不同步至微信读书的划线与笔记。 微信读书的自绘划选沿用 0.1.6 原生复制取文,会将选文写入剪贴板。原生复制受限时不处理。 ## 数据与权限 只在 weread.qq.com 注入界面,使用 storage 保存每本书的摘录、地名对应关系和地图尺寸。没有 EPUB 导入,也不下载整本书、不读取账号接口、不申请剪贴板读取权限。 底图数据来自 OpenStreetMap,在线地名搜索来自 Wikidata;两者通过 redshare.exosuperseal.xyz 的固定接口中转。在线搜索只传输入地名及候选条目 ID,不上传选文;地图请求只包含瓦片坐标。服务器会缓存地名结果和底图,不持久记录用户 IP 与请求日志。已内置威尼斯相关的历史地名与别名;其他书籍的地名可通过在线搜索补充,选定后按书记住对应关系。 ## 中国大陆网络 0.21 改为直连 ShuTu 服务器,由服务器访问境外地图和地名服务,用户无需配置 VPN。可用性取决于服务器及上游服务,未完成大陆三网实测。内置历史地名匹配与本地摘录保存不依赖在线查询。断网或中转故障时不会改为直接访问境外服务。 ## 验证范围 已通过本地模拟阅读页的原生/自绘划选、标记、附加摘录、候选选择、M 快捷键、尺寸调整、淡出和切书隔离检查,以及存储写入冲突检查。0.1.1 的逻辑与文件检查通过,本轮浏览器工具在 Work 设置中被禁用,未重新完成可视化检查。尚未在登录后的微信读书页面安装联调;网页改版可能需要调整选区适配。 Leaflet 1.9.4 的许可见 vendor/LEAFLET-LICENSE.txt。这是独立开发的浏览器扩展,与微信读书没有官方关联。