Facebook JavaScript SDK over HTTPS加载非安全项目

pap*_*lip 43 ssl https facebook 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?

小智 54

TL; DR

设置FB._httpstrue调用之前FB.init.像这样:

FB._https = true;
FB.init({
    /* your app id and stuff */
});
Run Code Online (Sandbox Code Playgroud)

说明

如果你解开Facebook JavaScript SDK,你会发现它基本上是一个带有一堆属性的对象文字.其中一个属性是_https布尔值.此属性确定FB._domain在发出API请求时要使用(存储在)的URL集.似乎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._httpstrue调用之前手动FB.init应该做的伎俩.

  • 因为[这个(所以链接)](http://stackoverflow.com/questions/7517670/fb-https-true-doesnt-play-nice-with-fb-canvas-setautoresize/7846888#7846888)我会改变`FB._https = true;`到`FB._https =(window.location.protocol =="https:");`喜欢@ simon-bachler说 (2认同)

sba*_*ler 9

所以这会给你相同的协议链接:

FB._https = (window.location.protocol == "https:");
Run Code Online (Sandbox Code Playgroud)


Lix*_*Lix 8

我几天前遇到过这个问题.我的整个应用程序都使用HTTPS,我的问题只是通过HTTP加载的个人资料图片...我的快速和肮脏的修复是手动替换所有个人资料图片的域名.例如,

str_replace('http://profile.ak.fbcdn.net','https://fbcdn-profile-a.akamaihd.net',$user['pic_square']);
Run Code Online (Sandbox Code Playgroud)

您必须检查并查看您的个人资料图片有哪些网址.我假设他们不是来自完全相同的地方.查看您自己的个人资料图片的网址,并替换我所拥有的内容https://fbcdn-profile-a.akamaihd.net.

在更加努力地查看Facebook文档之后:

如果需要通过安全连接返回图片,可以将return_ssl_resources参数设置为1:https://graph.facebook.com/4/picture?return_ssl_resources = 1 .

我发现了一个名为的附加参数return_ssl_resources,当传递给true它时,它会使用HTTPS返回个人资料图片.

$fql = "SELECT uid, name, pic_square FROM user WHERE uid=me()";

$param = array( 'method' => 'fql.query', 'query' => $fql, 'return_ssl_resources'=>1);

$fbuser = $facebook->api($param);
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力,我停止了混合安全警告.我希望这有帮助!