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

JavaScript中如何让聊天初始化函数仅执行一次,避免子路由重复触发

解决方案

核心思路是新增全局初始化状态标记,阻断重复的初始化逻辑,修改后的完整代码如下:

// 全局初始化标记,首次加载时初始化
if (window.chatBotInited === undefined) {
  window.chatBotInited = false
}

// 路径匹配且未初始化时才执行初始化逻辑
if(location.hash.indexOf("#/financial-bills") > -1 && !window.chatBotInited) {
  var initESW = function(gslbBaseURL) {
    embedded_svc.init(
      'https://example.com',
      'https://example/ChatBot',
      gslbBaseURL,
      '00D4C00000019Iy',
      'Support_Only',
      {
        baseLiveAgentContentURL: 'https://c.la2-c1cs.com/content',
        deploymentId: '5721E',
        buttonId: '5731E',
        baseLiveAgentURL: 'https://d.la2-c1cs.com/chat',
        eswLiveAgentDevName: 'EmbeddedServiceLiveAgent_Parent0200EAA_1754b2de11b',
        isOfflineSupportEnabled: false
      }
    );
    // 初始化完成后修改标记,后续不再重复执行
    window.chatBotInited = true
  };

  if (!window.embedded_svc) {
    var s = document.createElement('script');
    s.setAttribute('src', 'https://example/embeddedservice/5.0/esw.min.js');
    s.onload = function() {
      initESW(null);
    };
    document.body.appendChild(s);
  } else {
    initESW('https://service.force.com');
  }
}

你之前尝试的监听popstate删除script标签的逻辑可以直接移除,script标签加载完成后代码已经注入全局运行环境,删除标签不会清除已经执行的初始化逻辑和生成的聊天实例,没有实际作用。
如果后续需要支持用户离开#/financial-bills相关路径时自动关闭聊天、下次进入再重新加载,可以在路由变化逻辑中补充判断:路径不匹配时调用聊天SDK的销毁方法销毁已有的聊天实例,再把window.chatBotInited重置为false即可。

内容的提问来源于stack exchange,提问作者Duck_dragon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:00:04