3

私は次のことを達成しようとしています。
ページAには、アクセスが制限されているページBへのリンクがあります。アクセス制限は、PHPのサーバー側で処理されます。
ユーザーがページBへのこのリンクをクリックすると、リンクのhref(B)をアクションとして持つフォームを使用して、ページAに(javascriptを介して)モーダルダイアログが表示されます。(ユーザーに即座にフィードバックを提供するため。フォールバックは、アクセスしたいサイトにリダイレクトするログインフォームにユーザーをリダイレクトすることです。)このシステムは非常にうまく機能します。

しかし、今私の質問が来ます:
新しいウィンドウで開く必要があるアクセス制限されたリンクがあります。
ここで、フォームでtarget = "_ blank"を使用すると、ユーザーは元のページ(A)でログアウトしたままになり、バックグラウンドで開いたままになります。
フォームが新しいウィンドウ(B)に送信された直後に、ページ(A、バックグラウンド)をリロードする方法はありますか?

私の最初のアイデアは、window.location.reload();を使用することでした。Aページの送信ハンドラーで。
これはChromeでは機能せず、私が理解していることから、競合状態が発生する可能性があります。

もう1つのアイデアは、ajax呼び出しを介してユーザーにログインし、javascriptを介して新しいウィンドウを開くことです。ポップアップブロッカーを処理せずにこれを行う方法はありますか?


少し追加して、lostsource(以下を参照)のアイデアを実装しました。
一度だけリロードする必要があるので、クッキーが変更された場合、setIntervalのタイマーを停止することができます。

var ri=setInterval(function() {  
    if(oldCookie != document.cookie) {  
        // assuming a login happened, reload page  
        clearInterval(ri);  
        window.location.reload();  
    }  
},1000); // check every second

私はまだそのアイデアが大好きです。stackoverflowは素晴らしいです!

4

3 に答える 3

2

PHPセッション情報をCookie内に保存していると仮定すると、document.cookieの変更を監視できる可能性があります。

フォームを送信する前に、現在のCookieの値を保存し、タイマーで変更を監視します。

form.onsubmit = function() {
     var oldCookie = document.cookie;

     var cookiePoll = setInterval(function() {
         if(oldCookie != document.cookie) {
             // stop polling
             clearInterval(cookiePoll);

             // assuming a login happened, reload page
             window.location.reload();
         }
     },1000); // check every second
}
于 2012-11-15T19:26:05.130 に答える
0

親ページで、ログインによる視覚的/機能的な変更はありますか?可能な新しいアクションのように?そうでない場合は、親ページからすべてのアクションでログインをチェックするので、何もする必要はありません。それに加えて、アクセス許可をチェックできます。

変更や追加機能がある場合は、親でjavascript関数を呼び出すことができます。たとえばreloadMewindow.opener.reloadMe()

于 2012-11-15T19:20:50.640 に答える
0

単純なだけではないのはなぜですかsetTimeout

setTimeout(function(){ location.reload(); }, 1000);

少しハッキーですが、状況に適しているようです。

于 2015-06-10T14:29:22.837 に答える