Facebook Connect с использованием IE8 вызывает проблемы; какие-нибудь обходные пути? - PullRequest
10 голосов
/ 24 мая 2011

Я боролся с проблемами с помощью 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 () всегда возвращает неопределенное значение. В сообщении об ошибке Facebook , которое они исправили как ошибку, было рассмотрено много информации, которую я рассмотрел, хотя, к сожалению, она не увенчалась успехом, несмотря на постоянные сообщения об этой проблеме от пользователей в цепочке спустя долгое время. они посчитали это решенным.

В последней попытке рва я перехожу к этому и начну с здравого смысла тестового приложения FB, в котором нет ничего, кроме примера JS FB.init, добавленного с некоторыми записями консоли, чтобы показать, что 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 в IE, поэтому не могут загрузить

http://apps.facebook.com/party-on

ОБНОВЛЕНИЕ : мы определили, что проблема более серьезно влияет на IE8 в Windows XP или Vista - IE8 в Windows 7 кажется менее проблематичным (хотя и не на 100%)

Как пройти через это?

Итак ... учитывая, что проблема кажется довольно распространенной, и нет ясного решения, если не считать какой-то серьезной магии, которая еще не обсуждалась публично и которая, наконец, исправит эту проблему, было бы поучительно выделить другие возможные способы интегрировать с FB.connect, отличным от того, который они показывают

Причина, по которой я упоминаю об этом, заключается в том, что когда вы смотрите на то, как CityVille и FarmVille осуществляют интеграцию с FB, это не имеет ничего общего с тем, что сами авторы FB пишут как документы для разработчиков. Хм, интересно

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

Ответы [ 4 ]

1 голос
/ 21 августа 2012

Я решил похожую проблему, добавив асинхронную загрузку после тега 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>
1 голос
/ 17 ноября 2012

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

1 голос
/ 12 июня 2011

Просто случайный вопрос, действительно ли вы используете 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

0 голосов
/ 13 февраля 2013

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...