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

从应用B重定向回来源应用A时的代码错误排查

问题描述

我有一个嵌入在应用A中的应用B,用户从应用A点击进入应用B。我通过DirectService服务存储来源URL/URI:

export class DirectService {
  private redirect_uri: any;
  constructor() {}

  setRedirectUri(userUri): void {
    this.redirect_uri = userUri;
  }
  getRedirectUri() {
    return this.redirect_uri;
  }
}

在容器初始化时,我通过this.redirectService.setRedirectUri(document.referrer);设置redirect_uri(根据MDN文档,该值应为链接到B的应用A页面)。

我设置了一个按钮,点击时执行以下函数:

onClose(): void {
    window.location.href(this.redirectService.getRedirectUri());
}

此时href报错:This expression is not callable. Type 'String' has no call signatures

我尝试改用router:this.router.navigate(this.redirectService.getRedirectUri()),但出现错误:

main.js:1 ERROR TypeError: J.reduce is not a function
    at ee (main.js:1:2481641)
    at At (main.js:1:2480222)

请问我哪里出错了?

问题分析与解决

1. window.location.href 报错的原因

window.location.href 是字符串属性,不是函数,不能通过调用的方式赋值。正确写法是直接赋值:

onClose(): void {
    window.location.href = this.redirectService.getRedirectUri();
}

如果需要确保跳转的是外部链接,可额外检查URL是否包含http/https协议头,避免相对路径错误。

2. 使用router.navigate报错的原因

Angular的router.navigate()方法接收的参数是路由数组(比如['/home', 'detail']),而非完整的URL字符串,它仅用于应用内部路由导航,不适合跳转到外部应用(应用A)的URL。

另外,建议给DirectService里的变量加上明确类型声明,避免any类型带来的潜在问题:

export class DirectService {
  private redirect_uri: string;
  constructor() {}

  setRedirectUri(userUri: string): void {
    this.redirect_uri = userUri;
  }
  getRedirectUri(): string {
    return this.redirect_uri;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:01:44