7

Google Chrome (私は 9.0.597.98 を使用しています) で、Graph API/Javascript SDK を使用する私の Facebook iFrame アプリは、クロスドメイン スクリプティングに基づいて常に次の 2 つの JavaScript エラー (以下を参照) をスローする傾向がありますが、アプリの 1 つのページでのみ発生します。 .

2 番目のメッセージで無限の再試行ループに入ります。一晩放置した後、今朝までに 50 万回の再試行が報告されました。

使用されている FB 呼び出しはログイン用です。

FB.login(function(response) {
  if (response.session) {
    // user successfully logged in
  } else {
    // user cancelled login
  }
});

Firefox と IE9 では、これらのエラーは発生しません。これは Chrome (おそらく WebKit) に固有のものです。 奇妙なのは、アプリに 2 番目のページがありFB.Login、他のブラウザーに加えてChrome で動作することです。Safari にはクロス ドメイン スクリプティングに関するより厳しい要件があることをどこかで読みました。Safari と Chrome は同じコード ベースを共有しています。

Domains, protocols and ports must matchFB.Login(エラー メッセージ)呼び出しで動作する別のページがあるため、実際には満足していると思います。これら 2 つのメッセージのその他の唯一の違いは、postmessageクエリ引数の値がそれぞれ異なることです (メッセージでは太字で示されています)。しかし、Facebook アプリを構成する iFrame は 1 つしかないため、なぜ 2 つの異なる値が次々に使用されるのでしょうか。この項目に焦点を当てるように回答を誘導するつもりはありませんが、指摘したいと思います。

このエラーを解決するために何を試みるかについての提案を歓迎します。

Chrome JavaScript コンソール メッセージ:

メッセージ 1 : 安全でない JavaScript が URL でフレームにアクセスしようとしています

https://www.facebook.com/dialog/permissions.request?api_key=168297653202478&app_id=168297653202478&display=popup&fbconnect=0&locale=en_US&method=permissions.request&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy. php%23cb%3Df3d15633dc%26origin%3Dhttp%253A%252F%252Fsubdomain.example.com%252Ff22a8befa%26relation%3Dopener%26transport%3D postmessage %26frame%3D f111baf6f4 %26result%3D%2522xxRESULTTOKENxx%2522&perms=publish_stream%2Coffline_access&return_session=1&sdk= joey&session_version=3 フレームからの URLhttp://subdomain.example.com/colonversationmap/Admin.TestPage.aspx?signed_request=871miFgH_-o05POnx20387XHd2YlArKLU6qUv8VkxY4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTI5ODQyMDEwMSwidXNlciI6eyJjb3VudHJ5IjoiY2EiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX19 . ドメイン、プロトコル、およびポートが一致する必要があります。

メッセージ 2 : 安全でない JavaScript が URL でフレームにアクセスしようとしています

https://www.facebook.com/dialog/permissions.request?api_key=168297653202478&app_id=168297653202478&display=popup&fbconnect=0&locale=en_US&method=permissions.request&next=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy. php%23cb%3Df304d46e08%26origin%3Dhttp%253A%252F%252Fsubdomain.example.com%252Ff23ce8203%26relation%3Dopener%26transport%3D postmessage %26frame%3D fcd3637bc %26result%3D%2522xxRESULTTOKENxx%2522&perms=publish_stream%2Coffline_access&return_session=1&sdk= joey&session_version=3 フレームからの URLhttp://subdomain.example.com/colonversationmap/Admin.TestPage.aspx?signed_request=871miFgH_-o05POnx20387XHd2YlArKLU6qUv8VkxY4.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImlzc3VlZF9hdCI6MTI5ODQyMDEwMSwidXNlciI6eyJjb3VudHJ5IjoiY2EiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX19 . ドメイン、プロトコル、およびポートが一致する必要があります。

4

4 に答える 4

3

また、ChromeでgetLoginStatus()が呼び出されないという問題が発生しました。ページの読み込み時とユーザーが開始したアクションの後で呼び出してみましたが、成功しませんでした。

クロスドメインの問題ではないことが判明しました。ChromeのUn-Passwordise拡張機能によって通話がブロックされていました。拡張機能を無効にするとすぐに、ページの読み込みでも完全に機能しました。

この問題の詳細については、こちらをご覧ください:FB.getLoginStatusは、FacebookのJavaScriptSDKでコールバック関数を起動しません

于 2012-01-22T20:08:49.637 に答える
2

私のサイトでこの問題が発生しましたが、古いバージョンの FB.login を使用していたことが判明しました。

Facebook FB.loginページから:

2011 年 12 月 13 日の時点で、JavaScript SDK は認証用に OAuth 2.0 のみをサポートするようになりました。JS SDK で OAuth 2.0 を有効にする機能は、7 月に初めて導入されました。すべてのアプリは、2011 年 10 月 1 日までテストと移行が行われました。この変更により、 に置き換えたことを確認してresponse.sessionくださいresponse.authResponse。許可を求めるには、scope代わりに を使用する必要がありますperms。具体的な変更点について詳しくは、こちらをご覧ください。

于 2012-01-23T23:10:16.033 に答える
2

私の場合、FB.login(..)ページまたは DOM の読み込み直後に Facebook JavaScript API のメソッドを呼び出すと、Chrome が不平を言うことが判明しました。

Chrome でこの問題を回避するために、ユーザーがクリックしてログイン スクリプトを開始する必要があるボタンをページに配置しました。それはChromeで動作します。これは回避策ですが、今のところ私にとっては十分です。

注:私の質問で言及した機能する2番目のページについては、ユーザーが開始したログインプロンプト用にすでに設定されています。

于 2011-02-23T21:31:37.673 に答える
2

チャネル ファイルを追加すると、この問題が解決する場合があります。Facebook Javascript API ドキュメントを参照してください: https://developers.facebook.com/docs/reference/javascript/

于 2011-12-24T23:48:44.227 に答える