我们正在组合一个 FSSO API,它需要一个弹出窗口供用户登录。在弹出窗口中,我们执行两个任务:
调用服务以填充配置文件值,然后设置页面以根据事件类型(登录或注册)将用户重定向到。
将用户重定向到父窗口中的重定向页面并关闭 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 但没有运气的技巧,我只尝试了没有超时的回调。
在这里寻找处理此类时间问题的最佳实践,我现在感觉很糟糕。:)