百度地图API支持HTTPS


这里我用的是百度地图API3.0

结合我的实际项目和查到的一些博文进行一个总结。

项目需求:最近公司地图项目中需要把http协议改为https协议,接口改为https之后,请求接口都可以走通,但是百度地图不能正常显示了,以下是解决方案。

借鉴 https://juejin.cn/post/6844903566709260296#comment 博客。

页面初始引用

http://api.map.baidu.com/getscript?v=3.0&ak=秘钥&services=&t=时间

 修改为

//api.map.baidu.com/getscript?v=3.0&ak=秘钥&services=&t=时间

会报以下提示

 

 

 

 

 

 发现百度地图协议的区分是由‘window.HOST_TYPE’控制的,但是并未看到其对应的赋值,所以页面使用的是缺省值‘0’,即走http协议。

发现之前解决方案出现过  添加‘&s=1’参数,但是也没有生效。

https://api.map.baidu.com/api?v=2.0&ak=你的密钥&s=1

借鉴前辈的求证方案:对https的返回和http请求该文件的返回对比:

http请求:

(function(){ window.BMap_loadScriptTime = (new Date).getTime(); document.write('<script type="text/javascript" src="http://api.map.baidu.com/getscript?v=2.0&ak=你的密钥&services=&t=20180201111639"></script>');})();

https请求:

(function(){window.HOST_TYPE = "2"; window.BMap_loadScriptTime = (new Date).getTime(); document.write('<script type="text/javascript" src="https://api.map.baidu.com/getscript?v=2.0&ak=你的密钥&services=&t=20180201111639"></script>');})();

发现https请求多了一个参数属性    window.HOST_TYPE = "2";

最终实现方案:

    //采用引入百度Map3.0版本
    loadMapScript() {
      //让百度地图支持https请求
      const protocolStr = document.location.protocol // 返回当前浏览器 URL 的协议
      switch (protocolStr) {
        case 'https:':
          // 指定https访问类型,具体见百度地图API加载方式:http://www.jiazhengblog.com/blog/2011/06/28/284/
          window.HOST_TYPE = '2'
          break
        default:
          break
      }
      var script = document.createElement("script");
      script.type = "text/javascript";
      script.src =
        "//api.map.baidu.com/getscript?v=3.0&ak=密钥&services=&t=时间";
      script.onload = () => {
        this.loadInfoBoxScript();
      };
      document.body.appendChild(script);
    },

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM