fix(map): v2.0 补 HOST_TYPE;诊断页延长等待并修正协议
两处修正:
1) v2.0 必需 window.HOST_TYPE = '2'
官方 api?v=2.0 返回的内容是:
window.HOST_TYPE = "2";
window.BMap_loadScriptTime = ...;
document.write('<script src=".../getscript?v=2.0&ak=..."></script>');
即 HOST_TYPE 是由 api 那层设置的,直接加载 getscript 时必须自己补,
否则 SDK 初始化行为异常。
已在 utils.ts 与诊断页加载前补上,并把 BMAP_PROTOCOL 改为跟随页面协议。
2) 诊断页第 9 块的检查时机
客户带宽约 36KB/s,v2.0 SDK 221KB 需要 6 秒以上,
原来 5 秒就检查 DOM 和请求,必然看到「一直在加载」。
改为 15 秒,并在日志里提示「带宽慢的话要等 10 秒以上」。
说明:v2.0 的 getscript 通过 U(window,{BMap:B,...}) 暴露 window.BMap,
是完整可用 SDK;主瓦片为 qt=tile(普通 PNG 瓦片,实测直连 200 / 13382B 真实地图),
而 v3.0 用的 qt=vtile 矢量瓦片实测直连 403(当前 ak 未授权)。
| | |
| | | (function () { |
| | | var el = document.getElementById('log9'); |
| | | function lg(m, c) { var d = document.createElement('div'); d.className = c || ''; d.textContent = m; el.appendChild(d); } |
| | | lg('加载 /bmap-sdk2d.js 并监听网络请求...'); |
| | | // v2.0 必需:api?v=2.0 会设置 window.HOST_TYPE='2',直接用 getscript 时要自己补上 |
| | | window.HOST_TYPE = '2'; |
| | | window.BMAP_PROTOCOL = window.location.protocol.replace(':', ''); |
| | | lg('加载 /bmap-sdk2d.js 并监听网络请求...(226KB,带宽慢的话要等 10 秒以上)'); |
| | | var s = document.createElement('script'); |
| | | s.src = '/bmap-sdk2d.js'; |
| | | s.addEventListener('load', function () { |
| | |
| | | if (tile.length === 0) { |
| | | lg(' ⚠ 没有任何瓦片请求发出 → SDK 内部瓦片 URL 可能仍指向被 IPv6 拦截的原始域名', 'bad'); |
| | | } |
| | | }, 5000); |
| | | }, 15000); |
| | | }); |
| | | document.body.appendChild(s); |
| | | })(); |
| | |
| | | |
| | | // 百度官方要求:先声明协议,避免 HTTPS 页面下 SDK 拼出 http 子资源地址 |
| | | window.BMAP_PROTOCOL = window.location.protocol.replace(':', ''); |
| | | // v2.0 必需:官方 api?v=2.0 会设置 HOST_TYPE='2',直接用 getscript 时要自己补 |
| | | (window as any).HOST_TYPE = '2'; |
| | | window.BMapGL_loadScriptTime = Date.now(); |
| | | |
| | | const query = `type=webgl&v=1.0&ak=${accessKey}&services=&t=${Date.now()}`; |