我实现了一个可以动态添加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
即可答案 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。
我在我的项目中做的几乎相同,所以如果它不起作用,我希望错误位于不同的位置,并且可能需要测试链接。