重新加载Facebook评论会导致交叉来源错误

时间:2014-07-03 08:50:51

标签: javascript facebook facebook-graph-api

我已使用Facebook提供的代码在我的应用程序上实施了Facebook评论:https://developers.facebook.com/docs/plugins/comments/

评论正确加载,生活很好。但是,我有一个管理用户的设置面板,它公开了修改的能力:

  • 帖子数量
  • 主题
  • 按订单排序

当用户更改这些内容时,我使用

FB.XFBML.parse(this.fbEl);

刷新评论。这可行,但它无法正确呈现并给出错误:

  

Uncaught SecurityError:阻止具有原点的帧   " https://www.facebook.com"从访问原始框架   " http://mysite.dev&#34 ;.请求访问的帧具有协议   " https",被访问的帧具有" http"的协议。协议   必须匹配。

我搜索了互联网无济于事。有谁知道如何解决这个问题?

SDK代码如下:

<div id="fb-root"></div>
<script>
(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/sdk.js#xfbml=1&version=v2.0";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<div class="fb-comments" id="fb-comments" data-href="{{data.url}}" data-width="100%" data-numposts="{{data.numPosts}}" data-order-by="{{data.orderBy}}" data-colorscheme="{{data.colorScheme}}"></div>

1 个答案:

答案 0 :(得分:5)

可悲的是,没有正确的方法来解决这个问题。 Facebook必须在他们的JS框架内解决这个问题。好消息是我已经找到了一个快速修复程序,即使发生错误也会显示您的注释窗口。我已经测试了代码,Facebook允许我在发生错误后发表评论。

此修复程序使用jQuery,并且还使用setTimeout等待(并猜测)在删除类之前调用​​错误。我确信有更好的方法来实现这个修复,但到目前为止,这对我有用。例如,您可以将超时从1秒更改为2秒,以便在错误发生后更好地执行脚本。

 setTimeout(function(){$('.fb-comments').removeClass('fb_hide_iframes');},1000);