3

いくつかの共有機能(記事、ビデオ、写真などをユーザーのタイムラインに共有する)を備えたWebサイトのFBJSSDKを非同期でロードしています。ほとんどの部分ですべてが正常に機能しますが、IE7では、channelUrlに送信されるリクエストが常に存在することに気付きました。彼らは決して終わらないようです。サイトを完全に壊すわけではありませんが、これらすべてのリクエストを送信し続けたくありません。何がこれを引き起こしているのかわかりません。助けていただければ幸いです。

私のアプリは次のように設定されています:アプリドメイン-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/-見出しが「チャネルファイル」であるところまで読みます

引用:「チャネルファイルをできるだけ長くキャッシュすることが重要です。このファイルを提供するときは、有効期限の長い有効な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 に答える