Facebook JavaScript SDK 通过 HTTPS 加载非安全项目

标签 facebook ssl https facebook-javascript-sdk

我有一个使用 Facebook Connect.js 的 Facebook 应用程序.

我正在通过 HTTPS 运行我的应用程序。本站所有内容均来自https://除了一些必须包含在 Facebook 的 Connect.js 中的内容

问题是我收到警告消息说页面中有不安全的项目。

我已经使用 Chrome 检查了正在加载的脚本的开发人员工具/网络选项卡,以查看正在加载的文件以及从何处加载。

我能看到的唯一一个通过 HTTP 而不是通过 HTTPS 加载的是一个名为 http://static.ak.facebook.com/connect/canvas_proxy.php 的文件。 .

如何强制此文件使用 HTTPS?

最佳答案

长话短说

在调用 FB.init 之前将 FB._https 设置为 true。像这样:

FB._https = true;
FB.init({
    /* your app id and stuff */
});

解释

如果您对 Facebook JavaScript SDK 进行压缩,您会发现它基本上是一个具有大量属性的对象文字。其中一个属性是 _https,它是一个 bool 值。此属性确定在发出 API 请求时使用哪一组 URL(存储在 FB._domain 中)。 Facebook 似乎为每种类型的 API 请求保留了两组 URL——一个安全 URL 和一个非安全 URL——然后使用一个名为 getDomain() 的切换函数来确定使用哪个提出要求时。

JavaScript SDK 引起安全警告的原因是 FB._https 属性的定义方式。这是截至 2011 年 8 月 24 日的当前定义方式:

_https: (window.name.indexOf('_fb_https') > -1)

显然 Facebook 认为如果 window.name 属性中有 _fb_https,那么它一定是一个安全的应用程序。这显然是不正确的。真正的测试应该是这样的:

_https: window.location.protocol == "https:"

不幸的是,SDK 不是开源的,甚至没有很好的文档记录,所以我无法提交此更改的拉取请求:P。短期内,在调用 FB.init 之前手动将 FB._https 设置为 true 应该可以解决问题。

关于Facebook JavaScript SDK 通过 HTTPS 加载非安全项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5212016/

相关文章:

facebook - 获取用户新闻源中的所有最新条目

web-services - 如何为仅通过 Mule ESB 的 HTTPS 公开的远程 WSDL 指定 SSL 证书详细信息?

ruby-on-rails - 在 Windows 上使用 Koala 时 SSL 失败

ssl - 从hotmail下载邮件

ruby-on-rails - 强制 Ruby on Rails 应用加载 HTTPS 版本

python - 在 OpenShift 中以 HTTPS 模式配置 python flask 应用程序

node.js - 必须将哪些请求 header 发送到服务器才能为您提供非缓存响应

node.js - 混合内容: 'domain' 处的页面是通过 HTTPS 加载的,但在 Angular 中请求了不安全的 HTTP 端点

facebook - og :image Open Graph Warnings image size

javascript - 如何在 Facebook 页面的 iframe 选项卡上捕获 JavaScript 事件