2

私は現在、Facebook JavaScriptSDKとScoresAPI(https://developers.facebook.com/docs/score/)で遊んでいます。スコアを保存(投稿)するための小さなアプリケーションを作成しましたが、スコアを削除したいと思います。それらを投稿(保存)すると正常に機能します。

私のコードは次のようになります:

var deleteHighScoreUrl = 'https://graph.facebook.com/'+facebook.user.id+'/scores?access_token='+facebook.application.id+'|'+facebook.application.secret;

jQuery.ajax(
{
  type: 'DELETE',
  async: false,
  url: deleteHighScoreUrl,
  success: function(data, textStatus, jqXHR)
  {
    console.log('Score deleted.');
  }
});

「facebook」変数は、私のアプリケーションデータを保持するオブジェクトです。HTTP POSTの場合は正常に機能しますが、HTTP DELETEの場合、Firebug(Firefox 10の場合)で「NetworkError:400BadRequest」という応答が返されます。Firefoxが最初にHTTPOPTIONSを送信するのを見て(HTTP DELETEの使用が許可されているかどうかを確認するため)、このエラーが発生するので、GoogleChromeで同じことを試しました。GoogleChromeは実際のHTTPDELETEを送信し、それが次を返します。

「XMLHttpRequestは https://graph.facebook.com/USER_ID/scores?access_token=APP_ID|APP_SECRETを読み込めません。OriginMY_DOMAINはAccess-Control-Allow-Originで許可されていません」。

これは古典的なクロスドメインの問題だと思いますが、どうすれば解決できますか?Facebookアプリケーション( https://developers.facebook.com/apps )にドメインを追加しました。Facebookには「ユーザーのスコアを削除する」という段落があります。それで、スコアを(どういうわけか)削除することが可能でなければなりませんか?

4

2 に答える 2

1

クロスサイト スクリプティング( XSS ) のため、HTTP DELETE は実行できません。ただし、クエリ パラメータ?method=deleteを使用してHTTP POSTリクエストを送信すると、スコアが削除されます。

コードサンプル:

Facebook.prototype.deleteUsersHighScore = function()
{
  var deleteHighScoreUrl = 'https://graph.facebook.com/'+this.user.id+'/scores?access_token='+this.application.id+'|'+this.application.secret+'&method=delete';

  jQuery.ajax(
  {
    type: 'POST',
    async: false,
    url: deleteHighScoreUrl,
    success: function(data, textStatus, jqXHR)
    {
      console.log('Score deleted.');
    }
  });
}
于 2012-02-27T13:01:45.840 に答える
0

これは、クロス ドメイン セキュリティの問題です。

エラーに「Origin MY_DOMAIN」というメッセージが含まれているという事実は、コードのどこかで Facebook の例の 1 つをコピーしたが、MY_DOMAIN の値を使用している正しいドメインに変更していないことを示しています。

値「MY_DOMAIN」のすべてのコードをチェックします。

質問で実際のドメインを非表示にするために値を変更した場合は、このアドバイスを無視してください。

于 2012-02-16T09:54:48.297 に答える