Javascript Parse.FacebookUtils.logIn是否只允许通过弹出框登录Facebook?

Javascript Parse.FacebookUtils.logIn是否只允许通过弹出框登录Facebook?,javascript,jquery,google-chrome,facebook-graph-api,parse-platform,Javascript,Jquery,Google Chrome,Facebook Graph Api,Parse Platform,我正在尝试使用parse.com Facebook SDK允许我的用户使用Fb登录按钮登录我的网站 我可以在桌面浏览器和Safari上正常工作,但ios Chrome存在一个已知的问题,导致了所讨论的错误 通过调查,我得出结论,导致Facebook弹出窗口打开的是Parse.FacebookUtils.logIn类,对吗 如果是这样,是否不可能将其作为页面而不是弹出窗口打开?这将避免上述错误 我已经构建了一个解决方案,它适用于标准的Facebook登录,但不适用于解析。不确定是否可以使用这个?这

我正在尝试使用parse.com Facebook SDK允许我的用户使用Fb登录按钮登录我的网站

我可以在桌面浏览器和Safari上正常工作,但ios Chrome存在一个已知的问题,导致了所讨论的错误

通过调查,我得出结论,导致Facebook弹出窗口打开的是
Parse.FacebookUtils.logIn
类,对吗

如果是这样,是否不可能将其作为页面而不是弹出窗口打开?这将避免上述错误

我已经构建了一个解决方案,它适用于标准的Facebook登录,但不适用于解析。不确定是否可以使用这个?这项工作的信息来自

我也看到Rahul的答案是一个潜在的解决方案,但我不确定如何实现它

任何帮助都会得到感激的,因为我已经被困在这个问题上很久了

function getUserData() {
    FB.api('/me', function(response) {
        document.getElementById('response').innerHTML = 'Hello ' + response.name;
    });
}

window.fbAsyncInit = function() {
    //SDK loaded, initialize it
    Parse.FacebookUtils.init({
        appId      : '12345',
        xfbml      : true,
        version    : 'v2.3'
    });


    //check user session and refresh it
    var uri = encodeURI('http://mysite123.com/user_home.html');
    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            //user is authorized
            document.getElementById('loginBtn').style.display = 'none';
            getUserData();

        } else {
            //user is not authorized
        }
    });
};

//load the JavaScript SDK
(function(d, s, id){
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) {return;}
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_US/all.js";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));


//add event listener to login button
document.getElementById('loginBtn').addEventListener('click', function() {

var ABSOLUTE_URI = "http://mysite123.com/user_home.html";
var FB_ID = "12345";

  // Open your auth window containing FB auth page 
  // with forward URL to your Opened Window handler page (below)

  var redirect_uri = "&redirect_uri=" + ABSOLUTE_URI;
  var scope = "&scope=public_profile,email,user_friends";
  var url = "https://www.facebook.com/dialog/oauth?client_id=" + FB_ID + redirect_uri + scope;

  // notice the lack of other param in window.open
  // for some reason the opener is set to null
  // and the opened window can NOT reference it
  // if params are passed. #Chrome iOS Bug
  window.open(url);



function fbCompleteLogin(){

Parse.FacebookUtils.logIn(null, {
  success: function(user) {
    if (!user.existed()) {
      alert("User signed up and logged in through Facebook!");
    } else {
      alert("User logged in through Facebook!");
    }
  },
  error: function(user, error) {
    alert("User cancelled the Facebook login or did not fully authorize.");
  }
});

}

function requireLogin(callback){

    FB.getLoginStatus(function(response) {
        if (response.status != "connected"){
            showLogin();
        }else{
            checkAuth(response.authResponse.accessToken, response.authResponse.userID, function(success){

              // Check FB tokens against your API to make sure user is valid
            });
        }
    });

}

}, false);

我以前也遇到过同样的问题,并且解决了它。如果不想弹出新窗口,请使用OAuth登录facebook

您可以使用来快速完成此操作。这样做之后,只需简单地使用hyperlink,也许它会对您有所帮助(对不起,这些帖子是用中文繁体字描述的)

更新:


我创建了一个,请检查。

如果你想自己控制登录过程,你必须绕过一些解析部分。 我的建议是使用FBAPI登录Facebook,您可以自定义FBAPI

之后,您将从facebook获得一个对象,其中包含一些信息,如token、expireDate等。。。可以将此对象提供给Parse.FacebookUtils.logIn方法,以便将Facebook帐户链接到Parse帐户

这是cordova的一个片段,可能需要做一些调整

$cordovaFacebook.getLoginStatus().then(function(rep){
  console.log(JSON.stringify(rep));
  var expDate = new Date(new Date().getTime() + rep.authResponse.expiresIn * 1000 ).toISOString();
  var authData = {
    id: String(rep.authResponse.userID),
    access_token: rep.authResponse.accessToken,
    expiration_date: expDate
  }
  return Parse.FacebookUtils.logIn(authData);
})

我要睡觉了(UTC 23:48+8)。如果明天有时间,我将发布一个简单的示例。看起来很有希望-稍后会有一个很好的了解,所以这使用了嵌入式javascript?我是否需要对我的文件或后端进行任何附加设置以使其正常工作?或者我只是把文件放到我现有的文件结构中?它使用node.js作为解析后端。要设置它,请参阅GitHub中的步骤。好的,我可以设置云部件和应用程序,并将其与已存储在我自己的服务器上的现有js代码一起运行吗?是的,请参阅,您可以按照步骤在后端服务器中使用另一种语言来执行此操作。