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

如何重置window.launchQueue?解决Angular PWA重载重复触发问题

解决Angular PWA中launchQueue重复消费tel链接参数的问题

核心解决方案:标记已处理参数

利用sessionStorage记录已处理过的启动参数标识,每次消费前先检查该参数是否已被处理,仅在未处理时执行呼叫逻辑,避免页面重载后重复触发操作。

  • sessionStorage的特性适配场景:页面重载时数据会保留,但用户关闭并重新打开应用时数据会清空,既避免重载重复执行,又不影响新启动时正常处理tel链接。

修改后的代码实现

ngOnInit() {
  if ("launchQueue" in window && typeof window.launchQueue === 'object' && 'setConsumer' in window.launchQueue && typeof window.launchQueue.setConsumer === 'function') {
    window.launchQueue.setConsumer((launchParams) => {
      if (launchParams.targetURL && launchParams.targetURL.includes('call/?number=tel')) {
        // 生成参数唯一标识,用base64编码避免特殊字符冲突
        const processedKey = `tel_link_processed_${btoa(launchParams.targetURL)}`;
        
        // 检查是否已处理过该参数
        if (!sessionStorage.getItem(processedKey)) {
          const link = new URL(launchParams.targetURL).searchParams.get('number');
          const number = link?.split(':')[1];
          
          if (number) {
            this.handleTelLink(number);
            // 标记为已处理
            sessionStorage.setItem(processedKey, '1');
          }
        }
      }
    });
  }
}

补充说明

  • 若需要跨浏览器会话保留已处理记录(不推荐,可能导致用户无法重新触发同一号码的呼叫),可将sessionStorage替换为localStorage。
  • 增加了link和number的空值判断,避免因参数异常引发的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:30:08