分支
用户 tuqin <tuqin@tuqin.cn>
星期四, 十一月 5, 2026 17:27 +0800
提交者 tuqin <tuqin@tuqin.cn>
星期四, 十一月 5, 2026 17:27 +0800
提交f2416683bc31c1e9e77c7123ef350e8df32d016d
目录 5894193904927f66afe50c6a5b1a1eb11ba64ce1 目录 | zip | gz
上一版本 abc1115201eee5b6aff8251683017668514f0466 查看 | 对比
feat(map): 新增 2D 版百度地图改写 SDK(绕开 GL 版的 Blob Worker 域名问题)

诊断页(第 7 块)拿到 GL 版无法渲染的确切原因:
Uncaught NetworkError: Failed to execute 'importScripts' on 'WorkerGlobalScope':
The script at 'http://api.map.baidu.com/res/webgl/10/worker_wasm_g0l1oe.js' failed to load
Uncaught TypeError: Cannot read properties of null (reading 'TILE_VERSION')
Uncaught TypeError: Cannot convert undefined or null to object
Uncaught TypeError: Cannot read properties of null (reading '_rd')
地图容器 innerHTML 长度 0。

根因:BMapGL 用 Blob Worker 承载渲染核心(new Blob(['importScripts("'+url+'")']))。
SDK 里拼 worker 地址用的是 window.location.host,而 Blob Worker 上下文里没有 window,
改写后的域名在 Worker 内部失效,回落到 api.map.baidu.com —— 该域名走 IPv6 必然失败,
于是 worker 全部加载失败、WebGL 渲染链路中断,地图静默空白(不报错)。
这条路在 IPv6 不通的环境里无法通过改写解决。

改用 2D 版(BMap,v3.0):
- 纯 DOM + 图片瓦片,不使用 WebGL / Worker / WASM
- SDK 仅 260KB,域名引用极少

新增 public/bmap-sdk2d.js(2D 版改写产物):
"//api.map.baidu.com -> "//" + window.location.host + "/bmap-api
"apimaponline0-3.bdimg.com" -> (window.location.host + "/bmap-tile0-3")
改写后校验:bmap-api 引用 1 处、bmap-tile 引用 12 处、
残留 "apimaponlineN.bdimg.com" 0 处、不含 Worker。
(卫星图 apimaponlineN/starpic 的 2 处未改写,普通地图不使用)

诊断页 bmap-test.html 增加第 8 块:加载 /bmap-sdk2d.js 并渲染乌鲁木齐地图,
同时校验容器 innerHTML 与 img 数量,用于确认 2D 改写版是否可用。

复用现有 nginx 代理通道(/bmap-api、/bmap-tile0-3、/bmap-webmap、/bmap-map)。
已添加1个文件
已修改1个文件
242 ■■■■■ 文件已修改
public/bmap-sdk2d.js 1 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
public/bmap-test.html 241 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史