ユーザーがログインするためのポップアップ ウィンドウを必要とする FSSO API をまとめています。ポップアップでは、次の 2 つのタスクを実行します。
サービスを呼び出してプロファイル値を設定し、イベント タイプ (ログインまたは登録) に基づいてユーザーをリダイレクトするページを設定します。
ユーザーを親ウィンドウのリダイレクト ページにリダイレクトし、FSSO ポップアップを閉じます。
コード:
$(document).ready(function() {
var nextPage = "index.html",
storage = window.opener.sessionStorage;
function setStorage(callback){
$.ajax({
type: "GET",
cache: false,
dataType: "json",
url: "https://someserviceURL/service/profile",
success: function(objJSON){
//storage.op is set on the parent page when login or reg link is clicked
if (storage.op == "login") {
storage.firstname = objJSON.firstName;
storage.lastname = objJSON.lastName;
storage.setItem('loggedIn',JSON.stringify(true)); //Some browsers don't support booleans in sessionStorage
nextPage = "dashboard.html";
}
else if (storage.op == "register") {
storage.firstname = objJSON.firstName;
storage.lastname = objJSON.lastName;
storage.setItem('loggedIn',JSON.stringify(true));
nextPage = "options.html";
}
},
error: function( jqXHR, textStatus, errorThrown){
//display error message
}
});
callback();
}
setStorage(function(){
if (typeof window.opener != "undefined" && window.opener != null){
setTimeout(function(){
window.opener.location.href = nextPage;
window.close();
},3000);
}
});
});
問題: タイムアウトを 3000 未満に設定すると、sessionStorage の値を設定する前にウィンドウが閉じているように見えます。任意の時間ではなく、設定されている値に応じてウィンドウを閉じたいだけです。通過。タイムアウトを 0 に設定するトリックを試しましたが、うまくいきませんでした。また、タイムアウトなしでコールバックだけを試しました。
このようなタイミングの問題を処理するためのベスト プラクティスをここで探しています。:)