我有一个使用 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/