Facebook LIKE-button使用jquery

时间:2013-11-15 03:34:00

标签: javascript facebook facebook-graph-api

我有这个简单的Facebook应用程序。它使用jQuery,并根据Facebook自己的规范和示例代码制作。该应用仅适用于喜欢此页面的访问者。

我已经成功用PHP构建它,但由于其他原因,我需要用Javascript代替它。但是,“has-user-likes-page”功能并没有触发,我尝试了十几个这样的解决方案:event is not fired after clicking facebook like button?

现在,Facebook文档建议:https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe

我的代码中最相关的部分可能是这样的:

....
<body>
<div id="fb-root"><iframe id="contentIframe" scrolling="no"></iframe></div>
    <script language="javascript">
        $(document).ready(function() {
            $.ajaxSetup({ cache: true });
                $.getScript('//connect.facebook.net/en_UK/all.js', function(){
                    FB.init({
                        appId: '247171102105...',
                        channelUrl: 'https://facebook.****.com/customer1/test/channel.html',
                    }); 

                    FB.Event.subscribe('edge.create', function(href, widget) {
                        alert('You liked the URL: ' + href);
                    });

                    FB.getLoginStatus(updateStatusCallback);
                });
            });

            function updateStatusCallback() {           
                FB.login(function(response) {
                    if (response.authResponse) {
                        FB.api('/me', function(response) {
                            document.getElementById("contentIframe").src = "kalender.php?userID="+response.id+"&userName="+response.name+"&email="+response.email;
                            //alert(JSON.stringify(response, null, 4));
                        });
                    } else {
                        document.getElementById("contentIframe").src = "fallback.php";
                    }
                }, {scope:'email,publish_stream,user_photos'});
                FB.Canvas.setAutoGrow();
            }
    </script>
    ....

你有什么线索,为什么警告命令永远不会被解雇?

1 个答案:

答案 0 :(得分:0)

经过一个漫长的夜晚,我找到了解决方案。我结合了PHP和jQuery API,以便PHP部分检查。 jQuery处理其他一切 - 权限,转发等。它不是很优雅,但我找不到其他方法。

这位于文件顶部:

$facebook = new Facebook(array(
        'appId'  => '247171102105***',
        'secret' => '************************',
    ));
    $signed_request = $facebook->getSignedRequest();
    $like_status = $signed_request["page"]["liked"];
    if ($like_status == 1) {
        $url = "kalender";
    } else {
        $url = "userDoesntLike";
    }

在Javascript-part中:

function updateStatusCallback() {           
    FB.login(function(response) {
        if (response.authResponse) {
        FB.api('/me', function(response) {
                document.getElementById("contentIframe").src = "<?=$url;?>.php?userID="+response.id+"&userName="+response.name+"&email="+response.email;
                //alert(JSON.stringify(response, null, 4));
});
            } else {
                document.getElementById("contentIframe").src = "fallback.php";
            }
        }, {scope:'email,publish_stream,user_photos'});
        FB.Canvas.setAutoGrow();