最近使用AMapLoader开发高德地图相关页面遇到的问题,项目中存在两个地图页面,第一次打开的地图页面的地图样式是高德默认地图样式,然后跳转到第二个地图样式为自定义样式,发现第二个地图的自定义样式并没有生效,而第二个地图使用官方的其他地图样式时是可以正常生效的
网上有不生效的方法,添加jscode,即你自己的安全密钥
//在使用AmapLoader加载地图前加入如下代码
window._AMapSecurityConfig = { securityJsCode: '你的安全密钥' }
高德地图自定义样式即可生效
但以上只是解决高德地图自定义样式在一开始加载就不生效的办法,并不能解决我遇到的问题,使用各种方法无法解决,最后无奈请教高德官方大佬,创建了一个工单
这是我解决问题之前的代码,为了排除各个原因,分别在加载前、加载时、加载后设置样式以及添加jscode,当然都无效且多余。
官方大佬看过后,发现style请求中没有携带jscode,也就是你的密钥,导致样式接口请求失败,并且这个请求报错不会在控制台打印,也不会有弹窗之类的
以下是高德官方给的修改建议
改过之后发现页面跳转时自定义样式还是没有生效,style接口依然是没有携带jscode,于是再去咨询官方大佬,发现给的解决建议下面还有个链接,是解决这次问题的另一个及其重要的部分
即请求代理,请求高德地图必然是要做代理的,我们用的是nginx代理,但只做了最下面的web服务API代理,自定义地图服务代理是不同的地址,而我们自定义样式没有生效的最重要的原因就是少了这个代理
不添加代理时首次进入的第二个自定义地图页面,只要在window._AMapSecurityConfig中添加了jscode,自定义样式也是可以生效的,或者不生效时刷新一下自定义地图页面也可以,但终究使用体验非常差
愿我们永不止步!!!