0

Google ログインを使用する GWT アプリケーションを開発しています。このために、UserService.createLogin() 関数に基づいてユーザーを Google ログイン ページにリダイレクトする Java サーブレットがあります。問題の Java サーブレットには、「/login」URL でアクセスできます。以前は、ユーザーがアプリケーションのログイン ボタンをクリックするたびに、次のようにウィンドウを開きました。

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

次に、ログイン手順が成功すると (UserService.getCurrentUser() != null)、次のように Java サーブレットでリダイレクトを実行します。

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

success.html ファイルには、onLoad() が次のことを行う単純な行が含まれています。

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

これにより、元のウィンドウが閉じられ、Window.open() を呼び出す GWT クラスに登録した JavaScript コールバック関数「loginSucceededCallback」が呼び出されます。これはうまくいきます。

GWT アプリケーションをリロードする必要がないため、別のウィンドウに Google ログインを表示しています。ただし、Google ログイン ページをポップアップ ウィンドウ (または別のタブ) に表示するのではなく、GWT アプリ内に埋め込むことができれば、はるかに優れています。このために、外部ページの表示を可能にする Frame() または NamedFrame() オブジェクトの使用を検討していました。このようなフレームで Google ログイン ページを正常に表示できますが、(Google で) ログインが成功すると、success.html の JavaScript コードを取得して、GWT コードのコールバック関数を正しく呼び出すことができません。少なくとも私が思うに、明確な「window」または「window.opener」オブジェクトはもうありません。私の JavaScript の知識も限られており、既存のフォーラムの投稿のどれも私に光を見させてくれませんでした...

サーバー側でのログインの成功がGWTクライアントに通知されるように、これらのコードをリンクする方法を知っている人はいますか? FormPanel と Frame() で何かできますか?

ありがとう、

ラルフ

4

1 に答える 1

0

このようなものを使用できます

  frame.addLoadHandler(new LoadHandler() {

        @Override
        public void onLoad(LoadEvent event) {
            if(frame.getUrl().equals("your link here"))
                               loginSucceededCallback();
        }
    });
于 2013-06-15T10:23:48.770 に答える