Facebook Connect с использованием IE8 вызывает проблемы; любые обходные пути?

Я боролся с проблемами с помощью 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 являются документами разработчиков. Хм, интересно

Любые свежие идеи и различные ракурсы будут широко приветствоваться на этом этапе!

Ответ 1

Просто случайный вопрос, действительно ли вы используете IE 8 в режиме IE 8? Будьте осторожны, потому что иногда IE 8 переворачивается в режим совместимости (IE 7), а затем вы имеете дело со всем новым набором проблем. Этот код на вашей странице заставляет IE отображать в последней версии. Это должен быть самый первый метатег.

<meta http-equiv="X-UA-Compatible" content="IE=edge" >

http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx

Ответ 2

Я решил аналогичную проблему, добавив асинхронную нагрузку после тега body

<body>
<div id="fb-root"></div>
</body>
<script>
window.fbAsyncInit = function() {
    FB.init({
      appId : 'yourAppId', 
      status : true, 
      cookie : true,
      xfbml : true,
      frictionlessRequests : true
    });

    FB.Canvas.setAutoGrow();
    FB.Event.subscribe('auth.statusChange', yourCode); 
};
(function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
}(document));
</script>

Ответ 3

попробуйте удалить все вызовы console.log() во всем приложении.

Ответ 4

Просто потратили годы, пытаясь понять, почему мое приложение Facebook не работает в IE8, но было хорошо в других браузерах. Симптомы заключались в том, что FB.init, казалось, назывался ok, но в последующем вызове FB.getLoginStatus(обратный вызов) обратный вызов просто не вызывался в IE8 (WinXP).

В конце концов я исправил его, удалив "Google Chrome Frame" из IE8. Отключить его в менеджере надстройки IE было недостаточно, мне пришлось полностью удалить его через панель управления. Он был установлен, чтобы позволить GMail просматривать в IE8, и циник во мне думает, что Google, вероятно, не против слишком сильно, если это нарушает FB. Плагин также, казалось, помешал отладчику javascript IE8 от загрузки страниц FB, что затруднило работу над тем, что происходит...

В любом случае, подумал, что я поделился бы информацией здесь, если у кого-то другая проблема.