tuqin
3 天以前 23b513b644720666c5bda5073b34567cbadbbe4a
分支
用户 tuqin <tuqin@tuqin.cn>
星期四, 十一月 5, 2026 16:45 +0800
提交者 tuqin <tuqin@tuqin.cn>
星期四, 十一月 5, 2026 16:45 +0800
提交23b513b644720666c5bda5073b34567cbadbbe4a
目录 2ca3acac6dc5ef4cfd89fe76b68864aaff372646 目录 | zip | gz
上一版本 84abbd63fa039a39358fb8db7526b567422f3406 查看 | 对比
fix(map): 按百度官方规范修正 SDK 加载,并加诊断页定位线上加载失败

客户要求「地图必须能用」,重新排查后修正三处:

1. 加载前设置 window.BMAP_PROTOCOL = 'https' 与 BMapGL_loadScriptTime
百度官方要求在加载 SDK 前声明协议,否则 SDK 内部按默认协议拼子资源地址,
HTTPS 页面下会被当成混合内容拦截。SDK 里实测引用了 apimaponline0-3.bdimg.com、
webmap0.bdimg.com、apisv0/1.bdimg.com 等多个资源域名,协议不对会连锁失败。

2. 去掉 script.async = true
SDK 内部用 document.currentScript 定位自身地址(getscript 里出现 3 次),
async 脚本执行期间 currentScript 为 null,会让它走 fallback 分支。

3. 首次失败自动重试一次
跨省/移动网络偶发抖动时,重试往往能过。

另外新增 public/bmap-test.html 诊断页(部署后访问 /bmap-test.html):
用与正式代码完全相同的加载方式,逐步输出
浏览器 UA / 页面协议 / 是否在线 / 请求 URL
→ load 或 error 事件
→ window.BMapGL 是否挂载
→ 能否真正创建地图并渲染
并附上可直接在地址栏打开的 URL 做对比测试。
拿到客户这个页面的日志,就能区分是网络拦截、Key 白名单还是代码问题。

注:getscript 实测(含模拟 Chrome UA + 线上 Referer)返回 HTTP 200 / 875KB 完整 SDK /
business:0 / unauth:0,Key 本身有效。
已添加1个文件
已修改1个文件
224 ■■■■■ 文件已修改
public/bmap-test.html 109 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
src/components/map/src/utils.ts 115 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史