3

我正在为具有某些共享功能(将文章、视频、照片等共享到用户的时间轴)的网站异步加载 FB JS SDK。大多数情况下一切正常,但在 IE7 中,我注意到不断有请求发送到我的 channelUrl。他们似乎永远不会结束。它并没有完全破坏网站,但我不想继续发送所有这些请求。我不确定是什么导致这种情况发生,任何帮助将不胜感激。

我的应用程序设置如下:App Domain - mydomain.com 站点 URL - http://mydomain.com (注意:如果不清楚,mydomain 只是我用于问题的示例。)

我的 FB.Init 调用是

    FB.init({
        appId: XXXXXXXXXXXXX,
        channelUrl: '//' + window.location.hostname + '/channel.html',
        status: true,
        cookie: true,
        xfbml: true
    });
4

1 回答 1

3

根据文档,您可能必须编辑频道 url 文件的缓存以确保不会发生这种情况:

http://developers.facebook.com/docs/reference/javascript/ - 阅读标题为“频道文件”的位置

Quote:“尽可能长时间地缓存频道文件很重要。在提供此文件时,您必须发送有效的Expires标头,有效期较长。这将确保频道文件被浏览器缓存,这一点很重要流畅的用户体验。如果没有适当的缓存,跨域通信将变得非常缓慢,用户体验会严重下降。在 PHP 中实现此目的的一个简单方法是:

 <?php
 $cache_expire = 60*60*24*365;
 header("Pragma: public");
 header("Cache-Control: max-age=".$cache_expire);
 header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');
 ?>
 <script src="//connect.facebook.net/en_US/all.js"></script>

“通道文件”的意义在于它有助于跨域ajax请求。如果它没有被缓存,那么 FB api 会在每次它想要从 facebook 本身插入和执行一些 javascript 时请求它。如果您将其缓存在客户端的浏览器上,它只会使用空白 html 文件的本地副本,而不是在每次想要执行此操作时都引发请求。看看跨域ajax请求是如何执行的。我会去研究一个好的链接,然后回来描述 xdr(跨域请求)。

编辑:

于 2012-06-14T02:48:47.523 回答