我有以下代码在网站上启动facebook SDK(警告,删除了一些功能,并删除了名称空间,因为它们没有添加到此讨论中):
var facebookAppId = "501843009849438";
var facebookEvents = (function(){
var facebookHasLoaded = false;
var asyncLoadFacebook = function() {
// exposed to window because it is called by facebook
window.fbAsyncInit = function() {
FB.init({
appId : facebookAppId, // App ID
channelUrl : '//'+location.host+'/nl/recommendations/facebook/channel.html', //Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
};
// Load the SDK asynchronously
(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'));
facebookHasLoaded = true;
};
return {
enable: function() {
if (!facebookHasLoaded) {
jQuery('body').append('<div id="fb-root" />');
asyncLoadFacebook();
}
}
};
})();
// If there are no fb-like's found, we don't auto-start and you should manually load .enable().
jQuery(document).ready(function(){
if (jQuery('.fb-like').length !== 0) {
facebookEvents.enable();
}
});
此javascript放置在网站的每个页面上加载的文件中。因为我们不想在每个页面上加载SDK,所以在“document.ready”上添加了检查。
我尝试修复它做了什么 我在Chrome中放置了断点,很好地进入了asyncLoadFacebook函数。我还在页面上的div中获得了一个iframe。试过developers.facebook.com。还阅读了很多关于互联网的论坛。通过脸谱图双重检查appId,它是正确的appId。
类似按钮的HTML 这是我用来显示类似按钮的div:
<div class="fb-like" data-href="${canonicalURLEncoded}" data-send="false" data-layout="button_count" data-width="150" data-show-faces="false" data-font="verdana"></div>
加载页面时唯一“错误”是我看到很多错误消息,如:
Blocked a frame with origin "http://****************" from accessing a frame with origin "https://s-static.ak.facebook.com". The frame requesting access has a protocol of "http", the frame being accessed has a protocol of "https". Protocols must match.
但是在调用某个脚本url时,我从不在代码中使用http或https(正如您在脚本示例中看到的那样)。带有相似按钮的页面是http。另外,google plus在控制台中提供了相同的日志,但是plusone按钮的运行方式应该可以。
无法内联 不幸的是,我不能只是部署和测试。特别是内联javascript(正文后)不是一个选项。我真的希望异步版本可以工作..