2016-06-28 5 views
8

クライアント側のユーザーセッション(セッションタイムアウト、非アクティブ期間など)を維持する角度アプリケーション(SPA)があります。このセッションは、セッションが何らかの理由で期限切れになったときにユーザーに再ログインさせるために使用されます。アクティブでないときに状態が変更されたときにFirefoxがページを正しく更新しない

セッションの期限切れは、セッションが終了、ロックまたは状態を変更するときに$ rootScopeでイベントをブロードキャストする専用サービスによって制御されます。

関連するページ(ログインページ、ロック解除ページなど)へのルーティングを変更するセッション状態変更イベントにリスナーを追加します。 私たちはルーティングのために角度uiルータを使用しています。

ブラウザのウィンドウ/タブがアクティブでない(つまり、バックグラウンドで最小化されているなど)ときにセッション状態の変更が発生した場合、Firefoxではこの動作はうまくいきますが、ページは適切に更新されません。つまり、新しいページのコントロール(ユーザー名のテキストフィールドとパスワードフィールドなど)が表示されますが、新しいページの背景を見るのではなく、古いページが表示されます。

これはChromeとIEで完全に機能しますが、Firefoxではこの問題のみが表示されます。さらに、ブラウザのウィンドウ/タブがアクティブなときは、Firefoxでも完全に機能します。

どのような考えですか?

答えて

1

これは逆の言い方です。 rootScopeブロードキャストを使用しないでください。現在の状態でサービス内のvarを取得し、この値の関数を返します。

var userSession = 'Expired'; 

return { 
    getSessionState: function() { 
     return userSession; 
    } 
} 

あなたのコントローラで見ることができます。最初のダイジェストを実行すると、必要なビューに切り替わります。

$scope.$watch(function() { 
    return yourServiceName.getSessionState() 
}, function (val) { 
    //you can check the val here and change the route 
}); 

これが助けていない場合、あなたは(ダイジェストを使用してAngularsネイティブタイムアウト)なし任意のセットのタイムアウトを(JSタイムアウトは、ブラウザのウィンドウ/タブは火よりも、すべてではアクティブではなく、ときに停止されている$タイムアウトを使用していることを確認してくださいタブが再びピントが合っているときは、角度の違う振る舞いで終わることがあります)。

関連する問題