使用IE8的Facebook Connect会导致问题;任何解决方法?

问题描述

| 我一直在努力在IE8上使用Facebook Connect遇到问题,但似乎已经走到了尽头: 我们有一个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应用程序的测试,除了包含一些控制台日志以显示FB.getSession的FB.init JS示例外,该程序中不包含任何内容一个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本身作为开发人员文档的作者之间的距离并不遥远。.嗯,有趣 在这个阶段,任何新鲜的想法和不同的角度都将受到欢迎!     

解决方法

只是一个随机的问题,您是否真的在IE 8模式下使用IE 8?请注意,因为有时IE 8会切换到兼容模式(IE 7),然后您会遇到一系列全新问题。您页面上的这段代码会强制IE以最新版本呈现。它必须是第一个元标记。
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" >
http://msdn.microsoft.com/zh-CN/library/cc288325(v=vs.85).aspx     ,我在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>
    ,尝试删除整个应用中的所有“ 5”通话。     ,刚刚花了很长时间试图弄清楚为什么我的Facebook应用程序不能在IE8中运行,但是在其他浏览器中可以正常运行。症状是FB.init似乎没问题,但是在随后的FB.getLoginStatus(callback)调用中,IE8(WinXP)中并未调用该回调。 我最终通过从IE8卸载\'Google Chrome浏览器内嵌框架\'来修复它。在IE插件管理器中禁用它还不够,我必须通过控制面板将其完全卸载。它的安装是为了允许在IE8中查看GMail,我心里的愤世嫉俗者认为,如果这会破坏FB,那么Google可能不会太在意。该插件似乎还阻止了IE8的javascript调试器加载FB页面,这使得要进行的工作变得更加困难。 无论如何,以为如果有人遇到类似问题,我会在这里共享信息。