有没有办法让新窗口与产生它的窗口进行通信?

问题描述

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

我希望原始页面能够检测到这个“正常”并继续进行用户注册。我如何在新窗口和原始窗口之间进行通信?

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

解决方法

API(以及许多具有类似授权过程的 API)提供了一个 redirect_uri,用户将在授权成功后重定向到该 redirect_url。您可以传递一个 Select E,CASE WHEN QUALIFER = '1' THEN 'NAME1' WHEN QUALIFER = '2' then 'NAME2' ELSE 'FINALNAME' END AS TYPE,count(rt.ID) 'Number ' from TABLE_ONE co (nolock) join TABLE_TWO rt (nolock) on co.ID = rt.ID where co.E in (select * from #tempEmail) AND convert(date,co.INSERTED_TIMESTAMP)between '1/1/2020' and '8/15/2020' AND TRANS_STATUS = 'APPROVED' group by E,QUALIFER order by E,QUALIFER 查询参数,该参数会转到您网站上的某个页面。这样,一旦授权成功,新打开的页面(在您的网站上,Google 已将弹出窗口重定向到该页面)可以与原始页面(在您的网站上)通信。

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...