0

私はこのシンプルな Facebook アプリを持っています。jQuery を使用し、Facebook 独自の仕様とサンプル コードに従って作成されています。このアプリは、ページを気に入った訪問者のみが利用できます。

PHP でビルドすることに成功しましたが、他の理由から、代わりに Javascript で作成する必要があります。ただし、「has-user-liked-page」機能は起動せず、次のような多数のソリューションを試しました: facebook のようなボタンをクリックした後にイベントが発生しませんか?

現在、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>
    ....

alert-command が起動されない理由がわかりますか?

4

1 に答える 1

0

非常に長い夜の後、私は解決策を見つけました。PHP と jQuery API を組み合わせて、PHP 部分が like をチェックするようにしました。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部分で:

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();
于 2013-11-15T12:32:56.390 に答える