Inappbrowser回调函数

3

我尝试在登录 Facebook 后使用 Inappbrowser 进行回拨。但是它无法检查电子邮件、姓名等信息。这是我的代码:

Inappbrowser 调用

function onDeviceReady(){   
     var my_client_id = FBkey,
     my_redirect_uri = "http://www.fastabuy.com/index.php",
     my_type = "user_agent",
     my_display = "touch";

     var authorize_url = FBgraphapiurl+"/oauth/authorize?";
     authorize_url += "client_id=" + my_client_id;
     authorize_url += "&redirect_uri=" + my_redirect_uri;
     authorize_url += "&display=" + my_display;
     authorize_url += "&scope=publish_stream,email,user_likes";
     isfir = "true";

     var ref = window.open(authorize_url, '_blank', 'location=yes');
     ref.addEventListener('loadstop', function facebookLocChanged() {
         facebookLoc(my_redirect_uri)
     });
}

检查回调的方法
  function facebookLoc(loc){
     if (loc.indexOf("http://www.fastabuy.com/index.php?") > -1){
       alert(loc.indexOf)
     }
  }

如何检查URL是否包含字符串loc.indexOf>-1,以关闭inappbrowser。请帮我解决这个问题。

1
刚刚我在我的应用程序中完成了使用Facebook登录的任务。请看我的答案,它应该可以解决你的问题。 - Viswa
2个回答

7

1) 在InAppBrowser中,您需要使用loadstart事件来检查重定向页面。

2) 成功登录后,请使用close方法关闭InAppBrowser。

3) 当您在回调中调用facebookLoc函数时,请注意作用域,并使用me变量来解决此问题。

onFacebookLogin: function() {

    var me = this;
    var appInBrowser = window.open(authorize_url, '_blank', 'location=yes');

    appInBrowser.addEventListener('loadstart', function(event) {
         me.facebookLoc(event.url,appInBrowser);
    });    
}

facebookLoc : function(loc,appInBrowser) {
   if (loc.indexOf("www.facebook.com/connect/login_success.html") > -1){
         alert('Login success');
         appInBrowser.close();
   }
}

如何知道 URL 到达重定向 URL。 - Fazil
@Fazil,我不明白你的意思。你在问什么? - Viswa
我要调用onFacebookLogin函数。 - Fazil

4
这是一个示例 https://github.com/raulduran/facebook-cordova 相关的 IT 技术翻译。
onDeviceReady: function() {
    app.onFacebookLogin();
},

onFacebookLogin: function() {

    var authorize_url  = "https://m.facebook.com/dialog/oauth?";
        authorize_url += "client_id=" + appId;
        authorize_url += "&redirect_uri=" + redirectUrl;
        authorize_url += "&display=touch";
        authorize_url += "&response_type=token";
        authorize_url += "&type=user_agent";

    if(permissions !== '') {
        authorize_url += "&scope=" + permissions;
    }

    var userDenied = false;
    var appInBrowser = window.open(authorize_url, '_blank', 'location=no');

    appInBrowser.addEventListener('loadstart', function(location) {

        if (location.url.indexOf("access_token") !== -1) {
            // Success
            var access_token = location.url.match(/access_token=(.*)$/)[1].split('&expires_in')[0];
            window.localStorage.setItem('facebook_accessToken', access_token);
            appInBrowser.close();
        }

        if (location.url.indexOf("error_reason=user_denied") !== -1) {
            // User denied
            userDenied = true;
            window.localStorage.setItem('facebook_accessToken', null);
            appInBrowser.close();
        }
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接