Javascript 重新加载facebook评论会导致跨源错误

Javascript 重新加载facebook评论会导致跨源错误,javascript,facebook,facebook-graph-api,Javascript,Facebook,Facebook Graph Api,我已经使用Facebook提供的代码在我的应用程序上实现了Facebook评论: 注释加载正确,使用寿命良好。但是,我为管理用户提供了一个设置面板,它公开了修改以下内容的功能: 员额数目 主题 订购人 当用户更改这些时,我使用 FB.XFBML.parse(this.fbEl); 刷新评论。这可以工作,但渲染不正确,并会出现以下错误: 未捕获的安全性错误:阻止了具有原点的帧 “”访问具有原点的帧 "". 请求访问的帧具有以下协议: “https”,正在访问的帧具有“http”协议。协议

我已经使用Facebook提供的代码在我的应用程序上实现了Facebook评论:

注释加载正确,使用寿命良好。但是,我为管理用户提供了一个设置面板,它公开了修改以下内容的功能:

  • 员额数目
  • 主题
  • 订购人
当用户更改这些时,我使用

FB.XFBML.parse(this.fbEl);
刷新评论。这可以工作,但渲染不正确,并会出现以下错误:

未捕获的安全性错误:阻止了具有原点的帧 “”访问具有原点的帧 "". 请求访问的帧具有以下协议: “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>

(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id))返回;
js=d.createElement;js.id=id;
js.src=“//connect.facebook.net/en_US/sdk.js#xfml=1&version=v2.0”;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);

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

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

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

您是如何在应用程序中引用JavaScript SDK的?以上是一个模板,会临时放到页面中。这没有意义,但您可以尝试将js.src更新为=“以便强制协议。这种情况是否发生在多个浏览器中?仅使用当前window.location作为该URL的基础。不,不幸的是,你是对的,我的解决办法是放弃刷新页面。把你的手指拔出来。我肯定这会奏效,而且肯定两年后再也没有比这更好的了。我希望避免这种黑客行为。报告了这个问题。