重新加载 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 会导致无限循环和内存溢出