Bing地图闲置20分钟后无法显示路线,CredentialsExpired问题求助
Bing地图闲置20分钟后路线无法显示(凭证过期)解决方案
问题根源
Bing Maps的临时会话凭证默认有效期为20分钟,你当前的代码只在页面加载时初始化一次Directions模块和管理器,闲置超时后凭证过期,无法发起新的路线请求,就会抛出CredentialsExpired错误。之前监听失败是因为没找对正确的错误监听入口。
解决步骤
- 拆分初始化逻辑,将Directions管理器的创建封装成独立函数,方便过期后重新执行
- 给地图实例添加全局错误监听,捕获凭证过期事件
- 触发凭证刷新后,重新加载Directions模块并初始化管理器
修改后的代码示例
// 全局变量保留地图实例和Directions管理器 let map; let directionsManager; // 封装Directions管理器初始化逻辑 function initDirectionsManager() { Microsoft.Maps.loadModule('Microsoft.Maps.Directions', function() { // 先销毁旧的管理器实例(如果存在) if (directionsManager) { directionsManager.dispose(); } // 创建新的管理器实例 directionsManager = new Microsoft.Maps.Directions.DirectionsManager(map); directionsManager.setRenderOptions({ itineraryContainer: '#directionsItinerary' }); directionsManager.showInputPanel('directionsPanel'); }); } // 初始化地图时添加错误监听 function initMap() { map = new Microsoft.Maps.Map('#map', { credentials: '你的Bing Maps密钥' }); // 监听地图全局错误事件 Microsoft.Maps.Events.addHandler(map, 'error', function(e) { // 捕获凭证过期错误 if (e.errorDetails && e.errorDetails.authenticationResultCode === 'CredentialsExpired') { // 重新初始化Directions管理器(自动刷新会话凭证) initDirectionsManager(); } }); // 首次初始化Directions管理器 initDirectionsManager(); } // 页面加载时初始化地图 window.onload = initMap;
关键说明
- 每次凭证过期后,重新加载
Microsoft.Maps.Directions模块会自动获取新的临时会话凭证 - 销毁旧的
directionsManager实例可以避免内存泄漏和冲突 - 地图的
error事件是全局捕获Bing Maps服务错误的正确入口,能精准捕获CredentialsExpired状态
内容的提问来源于stack exchange,提问作者potbelny
相关产品推荐
相关产品推荐

