我正在开发一个使用 Google 登录的 GWT 应用程序。为此,我有一个 Java servlet,它基于 UserService.createLogin() 函数将用户重定向到 Google 登录页面。可以通过“/login” URL 访问相关的 Java servlet。以前,每当用户单击应用程序中的登录按钮时,我都会打开一个窗口,如下所示,
Window.open("/login", "Bla", "");
然后,当登录过程成功时(UserService.getCurrentUser() != null)我在 Java servlet 中执行重定向,如下所示,
response.sendRedirect("/success.html");
success.html 文件包含一个简单的行,其中 onLoad() 执行以下操作,
<body onLoad="window.opener.loginSucceededCallback();window.close();"/>
这会导致原始窗口关闭并调用我在调用 Window.open() 的 GWT 类中注册的 JavaScript 回调函数“loginSucceededCallback”。这工作正常。
我在单独的窗口中显示 Google 登录,因为我不希望 GWT 应用程序必须重新加载。但是,如果我可以将 Google 登录页面嵌入到 GWT 应用程序中,而不是在弹出窗口(或单独的选项卡)中显示它,那就更好了。为此,我正在考虑使用允许显示外部页面的 Frame() 或 NamedFrame() 对象。我可以在这样的框架中成功显示 Google 登录页面,但是当登录(在 Google)成功时,我无法获取 success.html 中的 JavaScript 代码来正确调用 GWT 代码中的回调函数。至少我认为不再有明确的“window”或“window.opener”对象。我的 JavaScript 知识也有限,现有的论坛帖子都没有让我看到光明......
有谁知道如何将这些代码链接在一起,以便 GWT 客户端注意到服务器端的成功登录?我可以用 FormPanel 和 Frame() 做点什么吗?
谢谢,
拉尔夫