个人随笔
目录
微信小程序web-view + 百度地图H5 轨迹功能实现笔记
2026-05-06 11:31:50
一、核心结论
微信小程序web-view 允许使用百度地图相关功能,但有明确规则限制:不能直接加载百度域名的链接(如https://api.map.baidu.com/...),需通过「自己备案的HTTPS域名H5页面」,在H5内引入百度地图JSAPI,实现轨迹(打卡点+连线)效果,小程序仅用web-view加载该H5即可。

二、整体实现流程(核心步骤)

  1. 准备百度地图AK:登录百度地图开放平台,创建「浏览器端」应用,设置安全码(开发阶段可填*,上线填自己的H5域名),获取AK(后续H5引入JSAPI需用到)。
  2. 开发H5地图页面:在自己的备案HTTPS域名下,创建map.html文件,引入百度地图JSAPI,编写Marker(打卡点)、Polyline(轨迹连线)逻辑,实现基础轨迹效果。
  3. 小程序端配置与开发:小程序页面用web-view组件加载自己域名的H5地址,配置小程序业务域名,完成小程序与H5的联动(可选传参)。

三、关键代码片段(可直接复用)

1. H5页面(map.html)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  <title>地图打卡轨迹</title>
  <style>
    html, body { margin: 0; padding: 0; height: 100%; }
    #container { width: 100%; height: 100%; }
  </style>
</head>
<body>
  <div id="container"></div>

  <!-- 引入百度地图JSAPI GL(替换成自己的AK) -->
  <script src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=你的百度AK"></script>
  <script>
    // 示例打卡点(可从小程序传递)
    const points = [
      { lng: 116.395, lat: 39.905, name: "景点1", num: 1 },
      { lng: 116.385, lat: 39.910, name: "景点2", num: 2 },
      { lng: 116.415, lat: 39.920, name: "景点3", num: 3 },
      { lng: 116.400, lat: 39.930, name: "景点4", num: 4 }
    ];

    // 初始化地图
    const map = new BMapGL.Map("container");
    map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 13);
    map.enableScrollWheelZoom(true);

    // 绘制轨迹连线(蓝色,与示例一致)
    const polylinePoints = points.map(p => new BMapGL.Point(p.lng, p.lat));
    const polyline = new BMapGL.Polyline(polylinePoints, {
      strokeColor: "#3377FF",
      strokeWeight: 6,
      strokeOpacity: 1
    });
    map.addOverlay(polyline);

    // 绘制打卡点(蓝色Marker)+ 序号(红色圆形标签)
    points.forEach(p => {
      const point = new BMapGL.Point(p.lng, p.lat);
      // 打卡点Marker
      const marker = new BMapGL.Marker(point);
      map.addOverlay(marker);
      // 序号标签
      const label = new BMapGL.Label(p.num.toString(), {
        position: point,
        offset: new BMapGL.Size(-10, -30)
      });
      label.setStyle({
        color: "#fff",
        background: "red",
        borderRadius: "50%",
        width: "24px",
        height: "24px",
        textAlign: "center",
        lineHeight: "24px",
        fontSize: "14px"
      });
      map.addOverlay(label);
    });

    // 可选:接收小程序传递的打卡点数据
    window.addEventListener('message', (e) => {
      const data = e.data;
      if (data && data.type === 'initPoints') {
        const newPoints = data.points;
        // 清空旧覆盖物,重新渲染轨迹(逻辑同上,可复用)
        map.clearOverlays();
      }
    });
  </script>
</body>
</html>

2. 小程序端代码

(1)页面结构(map-page.wxml)

<view class="container">
  <web-view src="{{mapUrl}}" bindmessage="onWebviewMessage"></web-view>
</view>

(2)页面样式(map-page.wxss)

.container {
  width: 100%;
  height: 100vh;
}
web-view {
  width: 100%;
  height: 100%;
}

(3)页面逻辑(map-page.js)

Page({
  data: {
    // 替换成自己的H5地址(HTTPS+备案)
    mapUrl: "https://你的域名/map.html"
  },

  onLoad(options) {
    // 可选:动态向H5传递打卡点数据
    const points = [
      { lng: 116.395, lat: 39.905, name: "景点1", num: 1 },
      { lng: 116.385, lat: 39.910, name: "景点2", num: 2 },
      { lng: 116.415, lat: 39.920, name: "景点3", num: 3 },
      { lng: 116.400, lat: 39.930, name: "景点4", num: 4 }
    ];
    this.setData({ points });
  },

  onWebviewMessage(e) {
    // 可选:接收H5返回的消息
    console.log("收到H5消息:", e.detail.data);
  }
});

四、微信小程序web-view核心规则(必看)

  • ✅ 允许:企业/组织主体小程序,web-view加载「自己备案的HTTPS域名」的H5(个人小程序不支持web-view)。
  • ❌ 禁止:web-view的src直接填写百度域名链接(如百度地图API地址、百度首页),无法将百度域名配置为小程序业务域名。
  • ✅ 允许:H5页面内,通过<script>标签引入百度地图JSAPI,H5跨域调用百度地图接口完全合法。
  • ✅ 必须:小程序后台需配置「业务域名」(添加自己的H5域名),并上传百度地图开放平台的校验文件,否则H5无法正常加载。

五、常见误区与注意事项

  1. 误区1:直接用web-view加载百度地图链接 → 线上必失效,需通过自己的H5中转。
  2. 误区2:个人小程序使用web-view → 不支持,必须是企业/组织主体小程序。
  3. 误区3:H5用HTTP协议 → 小程序仅支持HTTPS,需将H5部署到HTTPS服务器。
  4. 注意:坐标统一,百度地图JSAPI默认使用BD09ll坐标,若用GPS(WGS84)或高德(GCJ02)坐标,需先转换为BD09ll。
  5. 注意:百度地图AK需配置正确的Referer白名单(填写自己的H5域名),否则JSAPI加载失败。

六、官方文档链接(快速查阅)

  • 百度地图JSAPI GL:https://lbsyun.baidu.com/index.php?title=jspopularGL
  • 百度地图Marker标记:https://lbsyun.baidu.com/index.php?title=jspopularGL/guide/Marker
  • 百度地图Polyline折线:https://lbsyun.baidu.com/index.php?title=jspopularGL/guide/overlay/Polyline
  • 微信小程序web-view组件:https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html
  • 微信小程序业务域名配置:https://developers.weixin.qq.com/miniprogram/dev/framework/ability/domain.html
 7

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2