有没有办法让新 window 与生成它的 window 进行通信?

Is there a way for a new window to communicate with the window that spawned it?

我有一个应用程序要求用户使用 Reddit 登录。当他们接受时,它会打开一个新的 window(称之为 SpawnedWindow),Reddit 会询问他们是否要连接,当他们这样做时,SpawnedWindow 会使用 success/failure 信息重定向到我服务器上的 GET 端点.我的服务器将进行一些计算以确定身份验证是否真的成功,如果是,它将向 SpawnedWindow 发送“ok”(作为对 GET 请求的响应)。

我希望原始页面检测到这个“好的”并继续用户引导。我如何在新的 window 和原来的 window 之间传达这一信息?

如果您熟悉“使用 Google 登录”按钮:正如我们所知,有一个弹出窗口,根据身份验证的结果,主页将具有动态行为(基于登录成功与否)。这基本上就是我要实现的目标。

API(以及许多具有类似授权过程的 API)提供了一个 redirect_uri,用户将在授权成功后被重定向到。您可以传递一个 redirect_url 查询参数,该参数会转到您网站上的某个页面。这样,一旦授权成功,新打开的页面(在您的站点上,Google 已将弹出窗口重定向到)可以与原始页面(在您的站点上)通信。

一种方法是使用 BroadcastChannel - 在您的原始页面上打开一个频道,然后等待消息。在新页面打开同一个频道发送消息,老页面可以监听消息

另一种选择是使用本地存储。在原始页面上,侦听 storage change 事件。在新页面上,更改存储以触发事件。