Проблема с https://connect.facebook.net/en_US/all.js. Эта проблема неоднократно отмечалась как ошибка, но никогда не подтверждалась Facebook (см. этот отчет об ошибке ).
Этот код также заботится о all.js
неправильном обращении с защищенным соединением.
Обратите внимание, что для работы кода требуется http://jquery.com/.
Относительно полосы прокрутки
Хитрость заключается в том, чтобы загружать all.js
асинхронно только после полной загрузки DOM. Затем найдите fbAsyncInit
callback и продолжайте с setAutoGrow
.
Вы также упомянули фиксированную ширину (520 пикселей) и overflow(-x): hidden
. Это хорошая идея, хотя и не обязательно. Обратите внимание, что если вы решите пойти по этому пути, примените фиксированную ширину к элементу body
, а не к некоторому внутреннему элементу обтекания.
См. Следующий код и прилагаемые комментарии.
$(function(){
window.fbAsyncInit = function()
{
// fixes the HTTPS issue
// _https: (window.name.indexOf('_fb_https') > -1),
// @version /*1328456404,169895806,JIT Construction: v505175,en_US*/
FB._https = true;
// fix for all.js
// the following line enforces using non-secure URL (why Facebook?)
// FB.getDomain((c?'https_':'')+'staticfb',true)
// @version /*1328456404,169895806,JIT Construction: v505175,en_US*/
FB._domain.api = 'https://api-read.facebook.com/';
FB._domain.cdn = 'https://s-static.ak.fbcdn.net/';
FB._domain.staticfb = 'https://s-static.ak.facebook.com/';
FB._domain.www = 'https://www.facebook.com/';
FB._domain.m = 'https://m.facebook.com/';
FB.init({appId: [app id], channelUrl: '[domain]/channel.php', status: true, cookie: true, oauth: true, xfbml: true});
FB.Canvas.setAutoGrow(91);
// it is good idea to ensure that page will always open top-most view when navigated internally
FB.Canvas.scrollTo(0,0);
};
// Load the SDK Asynchronously after the DOM is loaded
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "https://connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
});