【问题标题】:Facebook Connect using IE8 causing problems; any workarounds?Facebook Connect 使用 IE8 导致问题;任何解决方法?
【发布时间】:2013-02-13 20:29:25
【问题描述】:

我一直在努力解决在 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 undefined 问题,因此无法加载

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

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

如何克服这个问题?

所以.. 考虑到这个问题似乎很常见并且没有明确的解决方法,除了一些尚未公开讨论的严肃魔法最终将解决这个问题,真正有指导意义的将是突出其他可能的方法与他们展示的以外的 FB.connect 集成

我提到这一点的原因是,当您查看 CityVille 和 FarmVille 如何进行他们的 FB 集成时,它与 FB 自己编写的开发文档相差无几。嗯,很有趣

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

【问题讨论】:

标签: javascript internet-explorer-8 facebook


【解决方案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

【讨论】:

  • 这意味着评论而不是答案。必须弄清楚这个 Stack 的事情。
【解决方案2】:

我解决了在正文标签后添加异步加载的类似问题

<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 似乎调用正常,但在随后调用 FB.getLoginStatus(callback) 时,IE8 (WinXP) 中没有调用回调。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-19
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多