javascript - 如果选中复选框,则在 Facebook 墙上发布消息

标签 javascript php facebook api checkbox

我想创建一个功能,以便在提交时在 Facebook 上共享某些内容,如果选中了复选框,例如 Ask.fm 上的回复表单(我相信您现在正在谈论我正在谈论的内容)。我根据这里的一些答案计算出如何在单击复选框时打开 Facebook 授权弹出窗口,但问题是我想保持不选中状态,直到用户授权并向 Facebook 应用程序授予所有必需的权限。更准确地说,您单击复选框,Facebook 登录弹出窗口将打开,但复选框保持未选中状态,直到您向应用程序授权所有必需的权限。到目前为止我有这个代码:

 <script type='text/javascript'>//<![CDATA[ 
$(window).load(function(){
 window.fbAsyncInit = function () {
   FB.init({
     appId: 'APP_ID',
     status: true,
     cookie: true,
     xfbml: true
   });
 };
 (function (d) {
     var js, id = 'facebook-jssdk',
         ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {
         return;
     }
     js = d.createElement('script');
     js.id = id;
     js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
 }(document));


$('#checkbox').change(function () {
 if ($(this).is(':checked')) {

     FB.login(function (response) {
         if (response.authResponse) {
             console.log('Welcome!  Fetching your information.... ');
             FB.api('/me', function (response) {
                 console.log('Good to see you, ' + response.name + '.');
             });
         } else {
             alert('User canceled login or did not fully authorize the app.');
         }
     }, {
         scope: 'publish_stream,email', 
        return_scopes: true
     });

 }
});


function fb_publish() {
  var msg = $('#message').val();
 FB.ui({
 method: 'stream.publish',
 message: msg,
 attachment: {
   name: 'Name here',
   caption: 'Caption here.',
   description: (
     'description here'
   ),
   href: 'url here'
 },
 action_links: [
   { text: 'Code', href: 'action url here' }
 ],
 user_prompt_message: 'Personal message here'
  },
  function(response) {
   if (response && response.post_id) {
      alert('Post was published.');
    } else {
      alert('Post was not published.');
    }
      }
    );  
   }

});
</script>

 <form onsubmit="fb_publish()">
   <input type="checkbox" name="facebook" value="1" id="checkbox" />Facebook
   <label for="Message">Message</label>
   <input name="message" id="message" type="text" />
   <input type="submit" value="post" />
</form>

最佳答案

试试这个代码:

<!DOCTYPE html>
<html>
<head>
    <title>Facebook Login</title>
    <script src="jquery-1.11.1.min.js"></script>
    <script type='text/javascript'>
        var perms = ['public_profile', 'email'];
        var declined_perms = [];
        $(window).load(function () {
            window.fbAsyncInit = function () {
                FB.init({
                    appId: 'XXXXXXXX',
                    status: true,
                    cookie: true,
                    xfbml: true
                });
                checkLoginState();
            };
            (function (d) {
                var js, id = 'facebook-jssdk',
                        ref = d.getElementsByTagName('script')[0];
                if (d.getElementById(id)) {
                    return;
                }
                js = d.createElement('script');
                js.id = id;
                js.async = true;
                js.src = "//connect.facebook.net/en_US/all.js";
                ref.parentNode.insertBefore(js, ref);
            }(document));


            $('#checkbox').change(function () {
                if ($(this).is(':checked')) {
                    if (parseFloat($(this).val())) {
                        customLogin();
                    } else {
                        rerequest();
                    }

                }
            });

            function statusChangeCallback(response) {
                console.log('statusChangeCallback');
                console.log(response);
                // The response object is returned with a status field that lets the
                // app know the current login status of the person.
                // Full docs on the response object can be found in the documentation
                // for FB.getLoginStatus().
                if (response.status === 'connected') {
                    // Logged into your app and Facebook.
                    testAPI();
                } else if (response.status === 'not_authorized') {
                    // The person is logged into Facebook, but not your app.

                } else {
                    // The person is not logged into Facebook, so we're not sure if
                    // they are logged into this app or not.

                }
            }

            function checkLoginState() {
                FB.getLoginStatus(function (response) {
                    statusChangeCallback(response);
                });
            }

            function rerequest() {
                FB.login(
                        function (response) {
                            testAPI();
                        },
                        {
                            scope: declined_perms.join(),
                            auth_type: 'rerequest'
                        }
                );
            }

            function customLogin() {
                FB.login(
                        function (response) {
                            testAPI();
                        },
                        {
                            scope: perms.join()
                        }
                );
            }

            function testAPI() {
                declined_perms.length = 0;

                FB.api('/me/permissions', function (response) {
                    var responsePerms = [];
                    for (var i = 0; i < response.data.length; i++) {
                        responsePerms.push(response.data[i].permission)
                        if (response.data[i].status == 'declined') {
                            declined_perms.push(response.data[i].permission);
                        }
                    }
                    for (var _i = 0, _j = perms.length; _i < _j; _i++) {
                        if (responsePerms.indexOf(perms[_i]) < 0) {
                            declined_perms.push(perms[_i]);
                        }
                    }

                    if (declined_perms.length) {
                        alert('User canceled login or did not fully authorize the app.');
                        console.log('Please Provide access to ' + declined_perms.join());
                        document.getElementById('checkbox').checked = false;
                        document.getElementById('checkbox').value = 0;
                    } else {
                        document.getElementById('checkbox').checked = true;
                        console.log('Welcome!  Fetching your information.... ');
                        FB.api('/me', function (response) {
                            console.log('Successful login for: ' + response.name);
                        });
                    }
                });


            }


            function fb_publish() {
                var msg = $('#message').val();
                FB.ui({
                            method: 'stream.publish',
                            message: msg,
                            attachment: {
                                name: 'Name here',
                                caption: 'Caption here.',
                                description: (
                                        'description here'
                                        ),
                                href: 'url here'
                            },
                            action_links: [
                                { text: 'Code', href: 'action url here' }
                            ],
                            user_prompt_message: 'Personal message here'
                        },
                        function (response) {
                            if (response && response.post_id) {
                                alert('Post was published.');
                            } else {
                                alert('Post was not published.');
                            }
                        }
                );

            }

        });
    </script>
</head>
<body>
<form onsubmit="return fb_publish()">
    <input type="checkbox" name="facebook" value="1" id="checkbox"/>Facebook
    <label for="Message">Message</label>
    <input name="message" id="message" type="text"/>
    <input type="submit" value="post"/>
</form>
</body>
</html>

关于javascript - 如果选中复选框,则在 Facebook 墙上发布消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24487059/

相关文章:

c# - 用于选项卡或 Javascript 的 Ajax 控件? (带有选项卡式内容的 aspx 页面)

javascript - 如何更改当前页面链接的颜色 - HTML/CSS/JavaScript

php - 使用PHP和FTP上传文件,我的错误在哪里?

javascript - 控制台中的缓存对象?

javascript - Angular - 数据已加载 - ID 的初始值为 NaN

javascript - 使用ajax从php文件获取随机数不会更新新结果

javascript - 在Bower中找到冲突的包,找到合适的包安装

facebook - 使用 Facebook 登录验证 Dynamics CRM Online

facebook - Yii Facebook 注册

javascript - Facebook 聊天 Conceal 我的 Flask 应用程序