最省事用嵌入,需从百度地图“分享→嵌入网页”获取含output=html的src并加referrerpolicy="no-referrer";交互自定义必须用BMapGL.Map+HTTPS,禁用file://,容器需显式宽高,坐标系须为bd-09。

直接用 <iframe></iframe> 嵌入最省事,能跑通就别碰 JS API;真要交互或自定义,必须用 BMapGL.Map + HTTPS,BMap.Map 已失效。
iframe 嵌入百度地图白屏或报 Refused to display
这不是你代码写错了,是百度主动拦截了非法来源——你复制的是浏览器地址栏 URL(比如 https://map.baidu.com/),不是嵌入代码。这类链接带登录态、临时参数,且被 X-Frame-Options: DENY 拦截。
- 必须去
map.baidu.com搜索目标地点 → 点右上角「分享」→ 选「嵌入网页」→ 复制生成的<iframe></iframe>代码 - 生成的
src必须含output=html参数,缺了就是跳转页,不是内嵌 - 务必加
referrerpolicy="no-referrer",尤其 iOS Safari 会因缺失该属性中断加载 - 别设
scrolling="no",现代浏览器已忽略;可加loading="lazy"提升首屏性能
BMapGL.Map 初始化报 BMap is not defined 或空白容器
两个高频原因:协议不对 + 构造函数写错。2022 年起百度已全面切换 WebGL 渲染,BMap 命名空间彻底停用,新 AK 只支持 BMapGL。
- 页面必须通过
http://localhost或https://访问,禁用file://协议(双击打开 HTML 必然失败) -
<script></script>标签里v=3.0和ak=缺一不可,且域名需在百度控制台白名单备案 - 初始化必须写
new BMapGL.Map("container"),写成BMap.Map会直接报ReferenceError - 容器
<div id="container"> 的宽高必须用 CSS 显式设置(如 <code>height: 500px),仅靠100%在多数布局下无效地图缩放/拖动卡顿、移动端双滚动条
这不是 API 问题,是 CSS 层级和手势冲突导致的视觉异常。
Wechat Article Html下载将 Markdown 文章转换为微信公众号兼容的纯 HTML 格式。当用户要求"转成微信格式"、"生成公众号文章 HTML"、"排版到微信草稿箱"、"微信粘贴格式"时触发。输出带内联样式的纯 HTML,微信编辑器可直接渲染,无需额外适配。支持标题、段落、列表、粗体、行内代码、表格、引用块、代码块、配图的完整转换。
- 给
<iframe></iframe>外层包一个<div style="position: relative; width: 100%; height: 400px;">,再把 <code>iframe设为position: absolute; top: 0; left: 0; width: 100%; height: 100% - 在
iframe上加style="pointer-events: auto"(否则 iOS 上可能无法触发缩放) - JS API 场景下,确保没同时开启
map.enableDragging()和父容器touch-action: pan-y冲突,后者会拦截横向拖动手势 - 如果用了多个地图实例(比如 tab 切换),销毁不用的地图用
map.clearOverlays()+map = null,否则内存泄漏会导致后续卡顿 - 高德、腾讯用
gcj-02,百度用bd-09,三者互转必须调用对应 SDK 的转换方法,不能靠简单加减 - 高德 SDK 提供
AMap.convertFrom,类型必须填gps(wgs-84)才能转gcj-02 - 百度 SDK 的
BMap.Convertor.translate已废弃,v3.0改用new BMapGL.Geocoder().getPoint异步反查,效率低,建议前端预转 - 别信网上“加 0.006 度就准”的土办法——城市间偏移量不一致
坐标系不统一,标记偏移几百米
最容易被忽略的其实是坐标系:百度地图只认
bd-09坐标。如果你用 GPS 设备导出的wgs-84,直接传进去,标记会整体偏移 300–700 米。真正卡住人的,从来不是怎么写那一行
new BMapGL.Map,而是ak没备案、file://协议硬跑、坐标系混用还反复刷新看效果。 - 给










