【问题标题】:Facebook: Unsafe JavaScript issue (document.domain values should be same)Facebook:不安全的 JavaScript 问题(document.domain 值应该相同)
【发布时间】:2013-01-31 07:14:03
【问题描述】:

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=unknown_user。

不安全的 JavaScript 尝试使用 URL 访问框架 http://www.mydomain.com/control/myfacebookapp/ 来自带有 URL 的框架 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。 请求访问的框架将“document.domain”设置为“facebook.com”, 但被访问的框架没有。两者都必须设置'document.domain' 设置为相同的值以允许访问。
xd_arbiter.php:18

不安全的 JavaScript 尝试使用 URL 访问框架 http://www.mydomain.com/control/myfacebookapp/ 来自带有 URL 的框架 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。 请求访问的框架将“document.domain”设置为“facebook.com”, 但被访问的框架没有。两者都必须设置'document.domain' 为相同的值以允许访问。 xd_arbiter.php:18

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

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

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

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

【问题讨论】:

    标签: javascript facebook google-chrome cross-domain


    【解决方案1】:

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

    • 协议必须相同(因此尝试访问 iframe 的页面必须与提供 iframe 的站点具有相同的协议),因此如果您在沙盒模式下测试您的应用程序(http 而不是 https),请禁用测试帐户的“安全浏览”模式
    • FB.init() 上的 channelUrl (参见下面的代码)
    • 启用 apache 的 headers mod 并将下面的行放在你的 .htaccess 中
    • <div id="fb-root"></div> 放在 body 标记之后,如此处 fb 文档中所述: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.
    

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

    请参考这个问题:Unsafe JavaScript attempt to access frame with URL: Domains, protocols and ports must match.

    【讨论】:

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

    在我的例子中,我在“_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 代码移动到在

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多