"FB没有定义为“FB”;内部窗口.fbSyncInit

"FB is no defined" inside window.fbAsyncInit

本文关键字:FB 内部 窗口 fbSyncInit 定义 quot      更新时间:2023-09-26

我正在实现一个编辑器,可以动态添加类似facebook的按钮,所以我写了以下代码:

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 的FB

试试这个版本:

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,因为您不应该将它用于诸如click listeners imho之类的基本内容。

我在我的项目中做的几乎都是一样的,所以如果它不起作用,我预计错误会出现在不同的位置,可能需要一个测试链接。