Я боролся с проблемами с помощью Facebook Connect на IE8, и я дошел до тупика:
У нас есть игра в Facebook (Canvas iFrame), у которой были проблемы с сообщением при использовании IE8. Мы внимательно следили за инструкциями на странице FB.init, но не получили нигде.
Мы попытались использовать исправление channelUrl и различные типы исправлений, как описано здесь.
Наши заголовки ответов отправляют заголовок P3P:
P3P CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
Мы также протестировали асинхронные и синхронизирующие версии этой интеграции, и не дали никаких различий в результатах.
Несмотря на все наши усилия, в IE8 FB.getSession() всегда возвращает значение undefined. Существует много информации, которую я просмотрел, хотя, к сожалению, не имел успеха, в сообщении, сообщенном Facebook, которое они решили как не ошибка... несмотря на текущие отчеты о проблеме от пользователей в потоке долго после того, как они сочли, что это разрешено.
В последней попытке я поворачиваюсь сюда и начинаю с разумности тестового приложения FB, в котором нет ничего, содержащегося в нем, кроме примера FB.init JS, добавленного с некоторым консольным протоколированием, чтобы показать, что FB.getSession получил uid.
Если вы отвечаете на это, могу я попросить вас проверить это на IE8 и посмотреть на консоль, которая при успешной загрузке сеанса FB будет писать
FB: [object Object] FB.getSession().uid: [your fb id]
http://apps.facebook.com/fb-js-issue
Код выглядит следующим образом:
<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId: 'appId',
status: true,
xfbml: true,
cookie: true,
channelUrl: "http://ourserver.com/channelUrl.htm"
});
FB.Canvas.setAutoResize();
console.log("Running FB test");
setTimeout(function() {
console.log("FB: " + FB + " FB.getSession().uid: " + FB.getSession().uid);
}, 5000);
};
(function () {
var e = document.createElement('script');
e.async = true;
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
В общем и целом, пример приложения работает нормально, хотя в редком случае даже с проблемами.
Наши настоящие приложения (которые используют тот же метод FB.init) постоянно страдают от проблем FB.getSession undefined в IE, поэтому не загружаются
http://apps.facebook.com/party-on
ОБНОВЛЕНИЕ. Мы определили, что проблема более серьезно влияет на IE8 в Windows XP или Vista. IE8 на Windows 7 кажется менее проблематичным (хотя и не 100%).
Как пройти мимо этого?
Итак, учитывая, что проблема кажется довольно распространенной, и никакое исправление не является ясным, за исключением некоторой серьезной магии, которая до сих пор не обсуждалась публично, что, в конечном итоге, исправит эту проблему, было бы действительно поучительным, чтобы выделить другие возможные способы для интеграции с FB.connect, отличным от того, который они показывают
Причина, по которой я упоминаю об этом, - это когда вы смотрите, как CityVille и FarmVille делают свою интеграцию с FB, он ничего не делает удаленно близко к тому, что сами авторы FB являются документами разработчиков. Хм, интересно
Любые свежие идеи и различные ракурсы будут широко приветствоваться на этом этапе!