facebook 聊天进入网站时出现内容安全策略错误?

Posted

技术标签:

【中文标题】facebook 聊天进入网站时出现内容安全策略错误?【英文标题】:Content Security Policy error coming up when facebook chat into website? 【发布时间】:2018-04-27 14:20:47 【问题描述】:

我正在尝试将 facebook 聊天功能集成到我的网站,但出现此错误:

Refused to display 'https://www.facebook.com/v2.12/plugins/customerchat.php?
app_id=166409452530897&channel=https%3A%2F%2Fstaticxx.facebook.com%2Fconnect
%2Fxd_arbiter%2Fr%2FJW5GlLnAsFw.js%3Fversion%3D42%23cb%3Df1fc7859561b6e%26do
main%3D[domainsnipped]%26origin%3Dhttps%253A%252F%252F[domainsnipped]%252Ff17b909ebfe83c4%26relation%3Dparent.parent&container_width=0&locale=
en_US&page_id=857469729300&sdk=joey' in a frame because an ancestor violates 
the following Content Security Policy directive: "frame-ancestors 
https://www.facebook.com".

我已将https://www.example.com/ 添加为我的页面设置中https://www.facebook.com/example/settings/?tab=messenger_platform 的白名单域

https://findmyfbid.com/ 报告我的 pageID 为 857469729300

我的 facebook appID(取自 https://developers.facebook.com/apps/ 似乎是 166409452530897,并且该应用处于“实时”状态。

这是我网站上的代码:

<div class="fb-customerchat" page_id="857469729300"></div>

<script>
    window.fbAsyncInit = function() 
        FB.init(
            appId            : '166409452530897',
            autoLogAppEvents : true,
            xfbml            : true,
            version          : 'v2.12'
        );
    ;

    (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 = "https://connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    (document, 'script', 'facebook-jssdk'));
</script>

我做错了什么?非常感谢!

【问题讨论】:

看看这有什么帮助吗? ***.com/questions/47736650/… 遗憾的是,我在发帖前在这里阅读了该问题和其他类似问题。 加载您的网站时没有看到任何错误,您在哪个页面上集成了聊天功能? 【参考方案1】:

根据facebook chat troubleshooting tips:

如果您看到控制台错误,例如“拒绝在框架中显示 *,因为祖先违反了以下内容安全策略指令:*”,请检查插件所在页面的域呈现在已被列入白名单。还要确保您没有将 Referrer-Policy 标头设置为 no-referrer。

在您的情况下,您发送Referrer-Policy: same-origin响应标头,这意味着请求iframe url时的Referer请求标头仅针对同一域的iframe url设置,而不是其他域,在本例中为 www.facebook.com。

所以Referer: https://www.example.com 请求标头没有为 facebook 聊天 url 设置,因此您可能会收到此错误。

将响应标头更改为origin

例如,用 php,做

header('Referrer-Policy: origin');

请注意,您可能需要重新加载页面几次并等待几分钟才能被浏览器“理解”。

参考文献

Referrer-Policy header

Same-origin policy

【讨论】:

该死的,我试过禁用该标题,并且确实硬刷新了几次页面,但并没有什么不同。我能想到的就是当时我无法重新启动 nginx :( 谢谢! 您介意从您的答案中编辑域名吗?谢谢。

以上是关于facebook 聊天进入网站时出现内容安全策略错误?的主要内容,如果未能解决你的问题,请参考以下文章

连接到我的 api 时出现电子内容安全策略错误

尝试使用 smack 连接 facebook 聊天时出现此错误

加载脚本时出现内容安全策略错误

Spring Social - facebook登录时出现404错误

是否可以在我自己的网站的 iframe 中实现 facebook 聊天?

在我的 iOS 应用程序中集成 Facebook 应用程序时出现重定向问题