2013-03-14 61 views
0

我正在开发一个使用Google登录的GWT应用程序。为此,我有一个Java servlet,它根据UserService.createLogin()函数将用户重定向到Google登录页面。有问题的Java servlet可以通过“/ login”URL访问。此前,每当用户点击应用中的登录按钮,我开了一扇窗如下,在GWT框架中显示Google登录页面

Window.open("/login", "Bla", ""); 

然后,在登录过程是成功的(UserService.getCurrentUser()!= NULL)我在执行重定向的Java servlet如下,

response.sendRedirect("/success.html"); 

的success.html文件包含一个简单的线,其中所述的onLoad()执行以下,

<body onLoad="window.opener.loginSucceededCallback();window.close();"/> 

这导致原窗口吨o关闭并调用我在名为Window.open()的GWT类中注册的JavaScript回调函数“loginSucceededCallback”。这工作正常。

我在单独的窗口中显示Google登录,因为我不想让GWT应用程序必须重新加载。但是,如果我可以将GWT应用程序嵌入Google登录页面而不是在弹出窗口(或单独的选项卡)中显示它,那将会更好。为此,我正在考虑使用允许显示外部页面的Frame()或NamedFrame()对象。我可以在这样的框架中成功显示Google登录页面,但是当登录(Google)成功时,我无法获取success.html中的JavaScript代码以正确调用GWT代码中的回调函数。至少我认为,没有明确的“窗口”或“window.opener”对象。我的JavaScript知识也有限,现有的论坛帖子都没有让我看到灯...

有没有人有一个想法如何将这些代码段连接在一起,使得服务器端的成功登录获取由GWT客户注意到?我可以用FormPanel和Frame()做些什么吗?

感谢,

拉尔夫

+0

通过使用锚标签我们可以连接到Gmail.com – swamy 2013-03-14 10:15:42

回答

0

您可以使用类似这样

frame.addLoadHandler(new LoadHandler() { 

     @Override 
     public void onLoad(LoadEvent event) { 
      if(frame.getUrl().equals("your link here")) 
           loginSucceededCallback(); 
     } 
    });