0

我有一个适用于 jQuery Mobile(完整的 ajax 导航)的 web 应用程序。我在 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 调用),它在我的第二页上不起作用。我重新加载(F5)我的第二页,它可以工作。

你见过这个问题吗?你有想法吗?

4

2 回答 2

0

你见过这个问题吗?

我认为这是常见的问题......</p>

// 绑定一个按钮来手动获取当前用户 $('.findme').off('click'); $('.findme').on('click', getCurrentUser);

如果您将按钮换成另一个按钮,JQuery 将不会以这种方式识别新按钮。改为以委托/现场方式使用on

于 2013-05-31T10:27:07.087 回答
0

如果您使用 ajax 更改页面,您不必(也不应该)每次都重新初始化 FB SDK。此外,您正在异步加载它,因此它不需要等待pageinit,但您需要在window.fbAsyncInit函数内绑定 click 事件。该函数在加载 FB SDK 后立即运行。

于 2013-05-14T10:27:37.753 回答