百度地图已全面下线iframe嵌入接口,因x-frame-options: deny和csp限制导致跨域嵌入失效;唯一稳定方案是使用带ak的javascript api(bmapgl)或静态图api。

直接说结论:百度地图官方已全面下线 <iframe></iframe> 嵌入接口,所有公开文档和控制台都明确标注“不推荐使用”,且多数域名(包括非百度系网站)会触发 X-Frame-Options: DENY 或 Content-Security-Policy: frame-ancestors 'none',导致页面空白或报错 Refused to display 'https://map.baidu.com/' in a frame。
为什么 <iframe src="https://map.baidu.com/"></iframe> 现在基本不可用
这不是你代码写错了,而是百度主动封禁了跨域 iframe 嵌入:
- 2022 年起,
map.baidu.com对所有非baidu.com二级域名的请求返回X-Frame-Options: DENY - 即使你在百度系子域(如
example.baidu.com)部署,也会遇到CSP frame-ancestors拦截 - 旧文档里曾存在的
http://api.map.baidu.com/iframe接口早已失效,HTTP 重定向到 HTTPS 后彻底 404 - 浏览器控制台明确报错:
Refused to display 'https://map.baidu.com/' in a frame because it set 'X-Frame-Options' to 'DENY'
替代方案:必须用百度地图 JavaScript API(BMapGL)
这是目前唯一稳定、可控、支持交互(缩放、标记、搜索、路线)的接入方式。关键点不是“怎么写 iframe”,而是“怎么换掉 iframe”:
- 需先去 百度地图开放平台 申请
AK(密钥),启用「JavaScript API」服务 - 引入 SDK 脚本时必须带
ak参数:<script src="https://api.map.baidu.com/api?v=3.0&ak=YOUR_AK"></script> - 初始化地图容器必须是 DOM 元素(不能是 iframe),例如:
<div id="map" style="width:600px;height:400px;"></div> - 基础初始化代码极简:
var map = new BMapGL.Map("map");<br>var point = new BMapGL.Point(116.404, 39.915);<br>map.centerAndZoom(point, 15);
如果非要“类 iframe”快速嵌入(仅限简单展示,无交互)
可用百度地图静态图 API 拼接 URL,生成一张 PNG/JPEG 图片——它本质是 <img>,不受 iframe 限制,但完全不可交互:
- URL 格式:
https://api.map.baidu.com/staticimage/v2?ak=YOUR_AK¢er=116.404,39.915&width=600&height=400&zoom=15 - 参数必须含
ak、center(经纬度)、width/height、zoom - 缺点明显:无法拖拽、缩放、点击标记、响应用户操作;更新位置需刷新整个图片
- 适合场景:邮件正文、后台报表、只读详情页的地址预览图
真正需要交互的地图,绕不开 JS SDK 的初始化流程和 AK 配置。很多人卡在“为什么 iframe 不显示”,其实问题不在 HTML,而在百度已把这条路物理封死了——这个限制本身,就是最该被确认的前提。











