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

PWA如何强制window.open调用的URL在系统浏览器而非PWA内打开?

问题描述

我基于@angular/pwa构建了一个Angular应用,支持微软、谷歌、脸书、推特等第三方登录。用户选择第三方登录时,我会调用window.open打开承载Challenge的URL。

当前遇到的问题是:从浏览器内的Web应用调用window.open时,目标URL会被强制在PWA内打开。我已经尝试了所有能想到的解决方案均无效,最后尝试的将第三方登录端点部署在子域名上的方案原本运行良好。

但现在我给应用新增了双因素认证(2FA)功能,要让2FA正常工作,ExternalLoginSigninAsync的调用域名必须和TwoFactorAuthenticatorSignInAsync的调用域名保持一致,因此需要解决让window.open打开的URL强制在浏览器而非PWA内打开的问题。

已排除的无效方案

以下方案均已验证无效,无需再提及:

  • 在navigationUrls中排除路径:"navigationUrls": [ "!/web/v3/Account/connect/" ]
  • 调用window.open(url, '_system')
  • 调用window.open(url, '_blank')
  • 添加ngsw-bypass参数:window.open(url + '?ngsw-bypass=true')

补充说明

经查阅Chromium源码,对应逻辑决定了URL是在PWA内启动还是打开新标签页,对应的调用栈如下:

  • WebappLauncherActivity.shouldLaunchWebapp
  • WebApkValidator.canWebApkHandleUrl
  • 若要让指定URL不在PWA内打开,需要让WebApkValidator.resolveInfosForUrlAndOptionalPackage返回false

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:03:00