1

我有以下代码在网站上启动 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。还阅读了很多关于互联网的论坛。通过 facebook graph 仔细检查了 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(紧跟在正文之后)不是一种选择。我真的希望异步版本能够正常工作..

4

0 回答 0