ОТБОЙ. Заработало, само.
Нужно закрывать окно, и не перезагружать при этом страницу.
Пишу микролибу для кросссоцсетной авторизации. При вызове метода FB.login() открывается авторизационный попап, после сабмита попап не закрывается. Просто пустой попап остайтся. Код:
function Social ( name ) {
var social = this,
init = function () {
social[ name ].init()
}
social.checkAuth = function ( callback ) {
social[ name ].checkAuth( callback )
}
social.login = function ( callback ) {
social[ name ].login( callback )
}
social.logout = function ( callback ) {
social[ name ].logout( callback )
}
init()
}
Social.prototype.facebook = new function () {
var fb = this
fb.init = function () {
window.fbAsyncInit = function() {
FB.init({
appId : socialSettings.fb.appId,
channelUrl : widgetUrl,
status : true,
cookie : true,
xfbml : true
})
FB.getLoginStatus(function(response) {
fb.status = response
})
}
async(function() {
$( 'body' ).append( '<div id="fb-root" style="display: none" />' )
var js,
d = document,
id = 'facebook-jssdk'
if ( d.getElementById( id ) ) return
js = d.createElement( 'script' )
js.type = "text/javascript"
js.id = id
js.async = true
js.src = '//connect.facebook.net/en_US/all.js'
d.getElementsByTagName( 'head' )[0].appendChild( js )
})
}
fb.checkAuth = function ( callback ) {
wait(
function(){ return !! fb.status },
function(){
fb.status = false
wait(
function(){ return !! fb.status },
function(){
fb.parseStatus( callback )
}
)
FB.getLoginStatus(function(response) {
fb.status = response
})
}
)
}
fb.login = function ( callback ) {
wait(
function(){ return !! fb.status },
function(){
FB.login(function( response ) {
fb.status = response
fb.parseStatus( callback )
})
}
)
}
fb.logout = function ( callback ) {
wait(
function(){ return !! fb.status },
function(){
FB.logout(function( response ) {
fb.status = response
fb.parseStatus( callback )
})
}
)
}
fb.parseStatus = function ( callback ) {
var status = ( fb.status.status == 'connected' ) ? fb.status.authResponse.userID : false
return callback( status )
}
}
// вспомогательные функции
function async ( callback ) {
setTimeout( callback, 0 )
}
function wait ( condition, callback ) {
var interval = setInterval( function () {
if ( condition() ) {
callback()
clearInterval( interval )
}
}, 100 )
}