Facebook:不安全的 JavaScript 问题(document.domain 值应该相同)

IT技术 javascript facebook google-chrome cross-domain
2021-03-03 05:12:24

我的是一个基于画布的 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) 中配置了正确的值。还尝试了两种设置:帐户设置 -> 安全 -> 安全浏览 ->(启用和禁用)

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

2个回答

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

  • 协议必须相同(因此尝试访问 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/
  • 尝试在用户操作之后放置所有自动登录代码(例如单击登录按钮)
  • 从 Canvas 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 的框架:域、协议和端口必须匹配。

感谢您提供详尽的修复列表,我已经尝试了所有修复(除了 .htaccess 之外,将为 tomcat 搜索等效的设置文件)但不幸的是,问题仍然存在。此外,根据错误,我尝试将 document.domain 值设置为“facebook.com”,但不能这样做,因为我的域完全不同,我们只能将此值设置为子域或类似域。
2021-04-28 05:12:24
document.domain 解决方法不起作用,所以我没有将它包含在我的列表中。现在,您有要显示的代码或应用程序 url 吗?
2021-04-28 05:12:24
我使用假帐户测试了您的应用程序(在 Chrome 25 上使用和不使用安全浏览)。启用安全浏览没有问题,应用程序正常运行,我回答了几个问题,然后进入了最终屏幕(获得 100 张代金券)。如果没有安全浏览,只有一个问题,但这个问题不会影响您的应用程序的功能。我回答了几个问题,然后我又回到了最后一个屏幕。请参阅我的回答中的编辑说明。
2021-05-07 05:12:24
嗨,感谢您的回复,我已通过电子邮件将一些 fb.init 代码和应用程​​序 URL 发送到您的联系人页面 ( realizzazione-sito.info/francesco_casula ),抱歉无法在此论坛上写相同的内容。如果您能让我们知道这篇文章的修复,我们将不胜感激,其他可能犯类似/相同错误的用户可能会从中受益。
2021-05-15 05:12:24
感谢您试用该应用程序。您是否尝试在 Chrome 25 的“隐匿”模式下点击apps.facebook.com/fbNamespace(在我的邮件中提到)?(请注意,上面提到的错误只是第一次出现,当您刷新时它们都消失了,因此如果您想尝试不同的安全浏览设置,则必须重新打开隐匿模式)。我也在 Ubuntu 上使用 Chrome 25,但每次都能重现该问题。你在编辑部分提到的 about:blank 问题确实是一个警告,我忽略了这一点。
2021-05-16 05:12:24

就我而言,我在“_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”。