24

Mine 是一个基于画布的 FB 应用。在 Chrome 和 Firefox 上都面临一个问题,(尽管通常是 Chrome):

1.当我在新的隐身 Chrome 窗口 ( https://apps.facebook.com/myfbappnamespace/ )上点击我批准的 fb 应用程序安全 URL 时,仅第一次出现以下错误,当我刷新页面时出现错误消失了(大多数时候)

about:blank 的页面显示来自 http://static.ak.facebook.com/connect/xd_arbiter.php?version=18#cb=f2e4fe7b …os.com%2Ff4aeadb2&domain=www.mydomain.com&relation=parent&error=的不安全内容未知用户。

不安全的 JavaScript 尝试 从具有 URL http://static.ak.facebook.com/connect/xd_arbiter.php?version=18#cb=的框架访问具有 URL http://www.mydomain.com/control/myfacebookapp/的框架f2e4fe7b …os.com%2Ff4aeadb2&domain=www.mydomain.com&relation=parent&error=unknown_user。请求访问的框架将“document.domain”设置为“facebook.com”,但被访问的框架没有。两者都必须将“document.domain”设置为相同的值才能允许访问。
xd_arbiter.php:18

不安全的 JavaScript 尝试 从具有 URL http://static.ak.facebook.com/connect/xd_arbiter.php?version=18#cb=的框架访问具有 URL http://www.mydomain.com/control/myfacebookapp/的框架f2e4fe7b …os.com%2Ff4aeadb2&domain=www.mydomain.com&relation=parent&error=unknown_user。请求访问的框架将“document.domain”设置为“facebook.com”,但被访问的框架没有。两者都必须将“document.domain”设置为相同的值才能允许访问。xd_arbiter.php:18

2.当我尝试 http url( http://apps.facebook.com/myfbappnamespace/ ) 时,控制台中显示的错误是:

不安全的 JavaScript 尝试 从具有 URL https://s-static.ak.facebook.com/connect/xd_arbiter.php?version=18#channel=的框架访问具有 URL http://apps.facebook.com/myfbappnamespace/的框架…Fcontrol%2Ffacebookappchannelurl%3Ffb_xd_fragment%23xd_sig%3Df23e84e85c%26。请求访问的帧具有“https”协议,被访问的帧具有“http”协议。协议必须匹配。

现在,当我登录我的 fb 帐户查看这些错误会发生什么时,它们消失了,只是有时。我知道我在查询中使用了“大多数时候”和“有时”,但这正是我正在发生的事情。我还搜索了论坛并意识到 fb 已经修复了这个应该是特定于 chrome 的旧问题。我已确保我的 FB.init 和其他调用是 location.protocol 值特定的。还在画布 url (http) 和安全画布 url (https) 中配置了正确的值。还尝试了两种设置:帐户设置->安全->安全浏览->(启用和禁用)

如果我在某处遗漏了什么,有人可以帮忙吗?

4

2 回答 2

23

有很多可能的问题。尝试以下解决方案之一:

  • 协议必须相同(因此尝试访问 iframe 的页面必须与提供 iframe 的站点具有相同的协议),因此如果您在沙盒模式下测试您的应用程序(http 而不是 https),请禁用“安全测试帐户的浏览模式
  • channelUrl on FB.init() (见下面的代码)
  • 启用 apache 的 headers mod 并将下面的行放在你的 .htaccess 中
  • <div id="fb-root"></div>按照此处的 fb 文档中的说明放置body 标记之后: https ://developers.facebook.com/docs/reference/javascript/
  • 尝试在用户操作之后放置所有自动登录代码(例如单击登录按钮)
  • 从画布 URL(在应用程序→设置中)中删除尾部斜杠,例如http://yoursite.com?
  • 像这样编辑您的<html>标签:<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="https://www.facebook.com/2008/fbml">

.htaccess的代码

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

渠道问题代码:

FB.init({
    appId: '1234567890',
    status: true,
    cookie: true,
    xfbml: true,
    channelUrl : '//yoursite.com/channel.html'
});

您的服务器提供的channel.html应该包含这一行:

<script src="//connect.facebook.net/en_US/all.js"></script>

编辑

关于您的第一个问题:

The page at about:blank displayed insecure content from http://static.ak.facebook.com/connect/xd_arbiter.php?version=18#cb=f2e4fe7b…os.com%2Ff4aeadb2&domain=www.mydomain.com&relation=parent&error=unknown_user.

这是用于测试条件的预期异常 - 这没有副作用,所以不要关心它。

请参考这个问题:不安全的 JavaScript 尝试使用 URL 访问框架:域、协议和端口必须匹配。

于 2013-03-03T10:25:10.363 回答
0

在我的例子中,我在“_Layout”视图中有一个“facebook-like-box”,我必须在global.css文件中为它定制一些 CSS。

.fb_iframe_widget,.fb_iframe_widget 跨度,.fb_iframe_widget 跨度 iframe[样式] {
    宽度:100%!重要;
}

然后,当我尝试加载具有 facebook 分享按钮的内部页面(例如文章和新闻)时,它开始给我这个错误:

未捕获的安全错误:无法从“HTMLIFrameElement”中读取“contentDocument”属性:阻止了来源为“http://localhost:51826”的框架访问来源为“http://static.ak.facebook.com”的框架。被访问的框架将“document.domain”设置为“facebook.com”,但请求访问的框架没有。两者都必须将“document.domain”设置为相同的值才能允许访问。

不知何故,我认为那行 CSS 代码导致了这个问题(通过在全局范围内),试图访问和修改我的共享按钮的 iframe 的行为。

  1. 删除那行 CSS 代码解决了这个问题。
  2. 将该行 CSS 代码移动到在 < style > 标签内具有“facebook-like-box”的特定页面。
于 2014-05-20T12:37:45.027 回答