You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:15:48