我有一个 Facebook 应用程序,使用Facebook Connect.js https://connect.facebook.net/en_US/all.js.
我正在通过 HTTPS 运行我的应用程序。网站上的所有内容均来自https://
但某些必须包含在 Facebook 中的内容除外Connect.js
问题是我收到警告消息,指出页面中存在不安全的项目。
我已经检查了正在加载的脚本Chrome http://en.wikipedia.org/wiki/Google_Chrome的开发人员工具/网络选项卡可查看正在加载哪些文件以及从何处加载。
我能看到的唯一一个通过 HTTP 而不是通过 HTTPS 加载的文件是一个名为http://static.ak.facebook.com/connect/canvas_proxy.php
.
如何强制该文件使用 HTTPS?
TL;DR
set FB._https
to true
打电话之前FB.init
。就像这样:
FB._https = true;
FB.init({
/* your app id and stuff */
});
解释
如果您取消缩小 Facebook JavaScript SDK,您会发现它基本上是一个带有一堆属性的对象文字。这些属性之一是_https
,这是一个布尔值。该属性决定使用哪一组 URL(存储在FB._domain
) 发出 API 请求时。看起来 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:"
Unfortunately, the SDK is not open source or even well documented, so I can't submit a pull request for this change :P. In the short term, setting FB._https
to true
manually before calling FB.init
should do the trick.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)