0

jQuery Mobile (完全な ajax ナビゲーション) で動作する webapp があります。jQueryMobile のpageinitイベント (呼び出される各ページ) で Facebook SDK を初期化します。

jQuery(document).on('pageinit', function (event) {
    // load FB SDK
    window.fbAsyncInit = function() {
        FB.init({
            appId      : 'MYAPPID',
            channelUrl : '//URL/channel.html',
            status     : true,
            xfbml      : true,
            oauth      : true
        });
        FB.Event.subscribe('auth.authResponseChange', getCurrentUser);
    };
    (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'));

    // bind a button to get current user manually
    $('.findme').off('click');
    $('.findme').on('click', getCurrentUser);
});
function getCurrentUser(response) {
    FB.api("/me", function (response) {
        if (window.console && window.console.log) console.log(response.name);
    });
}

そしてHTMLには含まれています

<button class="findme">Click to get infos about me</button>

このコードは最初のページで機能します。ページを変更 (ajax 呼び出し) しましたが、2 ページ目では機能しません。2 番目のページをリロード (F5) すると、機能します。

この問題を見たことがありますか?アイデアはありますか?

4

2 に答える 2

0

ページを変更するために ajax を使用する場合、毎回 FB SDK を再初期化する必要はありません (すべきではありません)。また、非同期でロードしているため、 を待つ必要はありませんがpageinit、関数内でクリック イベントをバインドする必要がありますwindow.fbAsyncInit。この関数は、FB SDK がロードされるとすぐに実行されます。

于 2013-05-14T10:27:37.753 に答える
0

この問題を見たことがありますか?

いつもの問題だと思います…</p>

// ボタンをバインドして現在のユーザーを手動で取得 $('.findme').off('click'); $('.findme').on('クリック', getCurrentUser);

ボタンを別のボタンに切り替えると、JQuery は新しいボタンをそのように認識しません。on代わりにデリゲート/ライブの方法で使用してください。

于 2013-05-31T10:27:07.087 に答える