Facebook Connect使用IE8导致问题;任何变通方法?

时间:2011-05-23 22:47:40

标签: javascript internet-explorer-8 facebook

我一直在努力解决在IE8上使用Facebook Connect的问题,而且我似乎达到了一个死胡同:

我们有一个Facebook游戏(Canvas iFrame)在使用IE8时报告了问题。我们已完全按照FB.init开发人员页面上的说明操作,但无处可去。

我们尝试使用channelUrl修复程序和各种修复程序here

我们的响应标头正在发送P3P标头:

P3P CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"

我们还测试了此集成的异步和同步版本,但未产生任何结果差异。

尽管我们付出了很多努力,但在IE8上,FB.getSession()始终返回一个未定义的值。我已经审查了很多信息,虽然失望但没有成功,但在向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方法)一直在IE上遇到FB.getSession未定义的问题,因此无法加载

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

更新:我们已经确定问题会对Windows XP或Vista上的IE8产生更严重的影响 - Windows 7上的IE8似乎问题较少(尽管不是100%)

如何解决这个问题?

所以..鉴于这个问题看起来非常普遍而且没有明确的解决方案,缺少一些尚未公开讨论并将最终解决这个问题的严重魔法,真正有益的是突出其他可能的方法与FB.connect集成,而不是他们展示的那个

我提到这个的原因是当你看看CityVille和FarmVille如何进行他们的FB集成时,它与FB自己作为开发人员文档所做的事情没有什么关系。嗯,有趣

在这个阶段,任何新的想法和不同的角度都会受到欢迎!!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我解决了在正文标记

之后添加异步加载的类似问题
<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>

答案 2 :(得分:1)

尝试删除整个应用中的所有console.log()次来电。

答案 3 :(得分:0)

我花了很多时间试图解决为什么我的Facebook应用程序不能在IE8中运行但在其他浏览器中运行良好。症状是FB.init似乎被称为ok,但在随后调用FB.getLoginStatus(回调)时,回调就是在IE8(WinXP)中没有被调用。

我最终通过从IE8卸载“Google Chrome Frame”来修复它。在IE加载项管理器中禁用它是不够的,我不得不通过控制面板完全卸载它。它已被安装,以允许在IE8中查看GMail,而我内心的愤世嫉俗者认为,如果破坏FB,谷歌可能不会介意太多。该插件似乎也阻止了IE8的javascript调试器加载FB页面,这使得更难以解决发生的事情......

无论如何,我想我会在这里分享信息,以防其他人遇到类似的问题。