window.fbAsyncInit中的“FB未定义”

时间:2014-10-14 09:34:41

标签: javascript facebook

我实现了一个可以动态添加facebook like按钮的编辑器,所以我编写了这段代码:

utils.insertFacebookSdkJs = function (win) {
    var document = win.document;

    win.fbAsyncInit = function () {
        FB.init({
            appId: 'app id', // App ID
            version:'v2.0',
            cookie: true, // enable cookies to allow the server to access the session
            xfbml: true  // parse XFBML
        });
        // Additional initialization code here
    };

    (function (d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {
            return;
        }
        js = d.createElement(s); js.id = id; //js.async = true;
        js.src = "//connect.facebook.net/zh_CN/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
};

$('#add').click(function(){
    //add <div class="fb-like"></div>
    utils.insertFacebookSdkJs(window);
});

当用户点击添加按钮时,将调用此功能。但它抛出错误:'FB未定义'。

更新:在utils.insertFacebookSdkJs函数中,我发现如果我将顶部窗口对象传递给参数'win',FB对象就可以了。但我将iframe窗口对象传递给参数'win',FB对象未定义。

更新:问题已解决。因为iframe中的facebook按钮。所以FB对象是iframe窗口中的一个字段。只需将FB修复为utils.insertFacebookSdkJs中的win.FB

即可

1 个答案:

答案 0 :(得分:0)

试试这个版本:

utils.insertFacebookSdkJs = function () {
    window.fbAsyncInit = function () {
        FB.init({
            appId: 'app id', // App ID
            version:'v2.0',
            cookie: true, // enable cookies to allow the server to access the session
            xfbml: true  // parse XFBML
        });
        // Additional initialization code here
    };

    (function (d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {
            return;
        }
        js = d.createElement(s); js.id = id; //js.async = true;
        js.src = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
};

document.getElementById('add').addEventListener('click', function() {
    utils.insertFacebookSdkJs();
});

删除了不必要的变量并更改了区域设置(用于测试)。还避免使用jQuery,因为你不应该将它用于基本的东西,如点击监听器imho。

我在我的项目中做的几乎相同,所以如果它不起作用,我希望错误位于不同的位置,并且可能需要测试链接。