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

Posted

技术标签:

【中文标题】重新加载 facebook 评论会导致跨源错误【英文标题】:Reloading facebook comments causes cross origin error 【发布时间】:2014-08-24 07:21:55 【问题描述】:

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

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

帖子数 主题 订购人

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

FB.XFBML.parse(this.fbEl);

刷新 cmets。这可行,但是它不能正确呈现并给出错误:

Uncaught SecurityError: Blocked a frame with origin “https://www.facebook.com”来自访问具有原点的框架 “http://mysite.dev”。请求访问的帧有一个协议 “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- data-numposts="data.numPosts" data-order-by="data.orderBy" data-colorscheme="data.colorScheme"></div>

【问题讨论】:

您是如何在应用程序中引用 javascript SDK 的? 以上是临时放入页面的模板。 没有意义,但您可以尝试将 js.src 更新为 = "connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.0" 以强制协议。这是否发生在多个浏览器中? 这只是使用当前的 window.location 作为该 URL 的基础。可惜没有雪茄 【参考方案1】:

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

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

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

【讨论】:

你是对的,我的解决方案是让步刷新页面。把你的手指拉出FB。 我相信这会奏效,而且两年后没有比这更好的了,这真是太疯狂了。我希望避免这种黑客行为。 报告了这个问题。 developers.facebook.com/bugs/191886764743793

以上是关于重新加载 facebook 评论会导致跨源错误的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Audience Network 返回错误“广告重新加载过于频繁”

将 CodeMirror 与 Vuejs/Nuxtjs 一起使用会导致服务器重新加载时未定义错误“CodeMirror”

重新加载行包含带有 rightView 的 UITextField 会导致无限循环和内存溢出

升级 turbolinks 导致 css 停止加载

刷新Flash 17次会导致错误#2046,并且需要重新启动浏览器

错误消息“无法加载 XMLHttpRequest。 AngularJS 中的 HTTP 仅支持跨源请求