第三方平台(如QQ登录、微信登录)登录自己的网站的时候,会先跳转到平台的网站,登录成功后就会进行307跳转会我们的网站,这个过程会有很不友好的体验,尝试过iframe打开第三方平台页面,但是登录成功后还是会被强制调整到平台的网站。也尝试过 用爬虫的方式把二维码取出来 放到自己的网站上,然后轮询服务器判断是否登录成功,但这种方法存在很大的不确定性,短期内问题不大。
最新的方案就是 用js打开新的 浏览器窗口,轮询登录成功后就关闭这个新窗口,js代码如下:
var Other = {
url:null,
w_obj:null,
interval:null,
login: function(type)
{
this.url = window.host_url+"passport/login.index/platform?authtype="+type;
console.log(this.url)
// 居中打开 500*500 的新窗口 用于第三方登录
var w_obj = window.open(this.url, "_blank", "scrollbars=yes,resizable=1,modal=false,alwaysRaised=yes,height=500,width=500,top="+(window.screen.availHeight/2-250)+",left="+(window.screen.availWidth/2-250));
// 定时回调
var interval = setInterval(is_login, 2000)
// 判断是否登录
function is_login()
{
if (w_obj != null && w_obj.closed){
// 我的窗口被关闭!
interval = window.clearInterval(interval)
// alert("登录失败,请重新登录");
} else{
// 我的窗口没有被关闭!
var result;
Ajax.get(window.host_url + window.api_path +"common",
{
type: 'token',
},
function(data){
result = JSON.parse(data);
console.log(result)
if (result.code == 200 && result.content != null) {
// 登录成功后关闭定时和窗口
w_obj.close();
interval = window.clearInterval(interval)
window.logined_func(result, login_type)
}
});
}
}
},
}