Почему XFBML работает везде, кроме Chrome?
Я пытаюсь добавить простую кнопку "Мне нравится" в свое приложение Facebook Canvas (iframe). Кнопка (и все другие элементы XFBML) работает в Safari, Firefox, Opera, но в Google Chrome.
Как я могу найти проблему?
ПРАВКА1:
Это ERB-макет в моем приложении Rails
<html xmlns:fb='http://www.facebook.com/2008/fbml' xmlns='http://www.w3.org/1999/xhtml'>
...
<body>
...
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId: '<%= @app_id %>', status: true, cookie: true, xfbml: true
});
FB.XFBML.parse();
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js#appId=<%=@app_id%>&amp;xfbml=1';
document.getElementById('fb-root').appendChild(e);
}());
FB.XFBML.parse();
</script>
<fb:like></fb:like>
...
Сообщение об ошибке JS в инспекторе Chrome:
Uncaught ReferenceError: FB is not defined
(anonymous function)
Uncaught TypeError: Cannot call method 'appendChild' of null
window
(anonymous function)
Вероятно, похоже на http://forum.developers.facebook.net/viewtopic.php?id=84684
2 answers
Я делаю точно то же, что и ты. И это работает. Попробуйте этот фрагмент.
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({appId: '<%= @app_id %>', status: true, cookie: true, xfbml: true});
FB.Event.subscribe('auth.sessionChange', function(response) {
if (response.session) {
// A user has logged in, and a new cookie has been saved
} else {
// The user has logged out, and the cookie has been cleared
}
});
</script>
Браузеры в корпоративных средах (или с VPN) за маршрутизатором Zscaler не смогут загружать ссылки сценариев, которые Zscaler временно перенаправит на страницу предупреждения о содержимом "Безопасность Интернета от Zscaler". Аналогично, некоторые щелчки в StackOverflow перестали бы отвечать. В качестве обходного пути я нахожу и вставляю неудачные ссылки в адресную строку и подтверждаю свое намерение в приглашении Zscaler.