0

私の質問は非常に奇妙で、それができるかどうか完全にはわかりません。私はLiferayにSpring MVCを使用しており、次のことを達成しようとしています。私が行っているアプリケーションには、2 つの異なる URL にある 2 つのドメイン 2 ポータルがあります。ユーザーが最初のポータルにログインし、資格情報が検証された後、同じポータル内の特定のページにユーザーをリダイレクトし、別のポータルのランディング ページを新しいタブで開く必要があります。

私は次の方法でこれを達成しようとしていました。私が試した単一のログイン機能に対して2つの応答を持つことができないので、ログインリダイレクトアクションの後、liferayフック機能を使用して彼をリダイレクトするためにログインしたら.

最初のポータルのランディング ページに移動します。同じリダイレクト アクションで、ユーザーがここにログインしたことを通知する Cookie を作成します。

@Override
public void run(HttpServletRequest request, HttpServletResponse response)
        throws ActionException {

    try {
        Cookie loginCookie = new Cookie("loged_in_confirmed","1");
        response.addCookie(loginCookie);

        response.sendRedirect("somePage");

    } catch (Exception e) {
        //TODO
    }

リダイレクトによって表示されるページには、Cookie をチェックする jQuery ドキュメント対応関数があります。Cookie が存在する場合は削除され、新しいタブで別のポータルにリダイレクトされます。

ただし、新しいタブを開くと、ポップアップ ブロッカーによって常にブロックされます。私はwindow.href、window.openでターゲットを空白にして開いてみましたが、隠しリンクを追加しようとしましtarget ="_blank"たが、それでもポップアップブロッカーが彼を取得します。私はどんな提案にもオープンです。私がやっている方法で何かが欠けているのでしょうか、それともここで完全にターゲットになっていて、これを行うにはまったく別の方法がありますか?

4

1 に答える 1

0

ポップアップ ブロッカーは、ユーザー アクションの結果としてウィンドウが開いているかどうかを確認します。基本的にこれは、window.open やその他のウィンドウ オープナーがコール スタックを調べて、入力イベントを処理しているかどうかを確認し、処理している場合にのみポップアップを許可することを意味します。これにより、ポップアップ ブロッカーと互換性のある方法で 2 番目のページを開くための 2 つのオプションが思い浮かびます。

  1. ユーザーが 2 番目のサイトに個別にログインするか、既に処理中のログインをポーリングするページへのログインをクリックしたときにポップアップを開き、ログインが失敗した場合はそれ自体を閉じます。おそらくこれを行う最も良い方法は、ログインが成功または失敗するのを待ってから、2 番目のポータルへのリダイレクトまたはポップアップを閉じる JS のスニペットを返すページをロードするようにポップアップを設定することです。
  2. target="_blank" を使用して、最初のポータルに「ここをクリックして 2 番目のポータルを使用する」リンクを配置します。これは、ユーザーの介入なしに両方のサイトをロードすることがクライアントの要件でない限り、私が行うことです。
于 2012-05-06T23:19:45.690 に答える