2

StackOverflow のこれを含む多くの質問と回答を読みましたが、どれも機能しません。私が見たすべての回答に対する私の質問は、「Safari で動作しますか?」です。

これをSafariで動作させようとしています。Chrome と Firefox で問題なく動作します。しかし、Safari ではログイン画面がフリーズし、「安全でない JavaScript が URL でフレームにアクセスしようとしています」というログ メッセージが表示されます。

私はキャンバスアプリを持っています。ユーザーをログインさせ、ログイン後にページにリダイレクトしたい。ログイン後に直接リダイレクトしようとしています。私が試してみました

  1. Facebook URL への設定window.top.location(all_data 引数として署名されたリクエストに渡されるいくつかのデータを使用)

  2. window.locationアプリと同じドメインの URL に設定します。

  3. イベントにサブスクライブし、auth.loginそこにリダイレクトを配置する

  4. コールバックにリダイレクトを入れてログインする

これらはいずれも Safari では機能しません。どうしようもないと思い始めています。

function doSomething()
{
  FB.login(
    function(loginResponse)
    {
      if (loginResponse.authResponse)
      {
        window.top.location = "my url"
      }
    },
    {
      scope:"some,scope"
    }
  );
}
}

Nitzan Tomer への回答として、Safari では機能しないが他のものでは機能する同等のコードを次に示します。

function myThing()
{
  FB.login(function(loginResponse)
    {
      if (loginResponse.authResponse)
      {
        FB.api('/me', function(response)
        { 
          window.location = "http://my_app.com?x=" + response.xyz;
        });
        }
    },
    {
      scope:"scopes"
    }
  );
}
4

2 に答える 2

0

これはあなたの問題に対する解決策ではありませんが、より多くの「回避策」ですが、コールバックからではなくまだ使用window.top.locationされているため、機能する可能性があります(fbであるため、コールバックが実行される場所がわかりません)それを実行するSDK、おそらくiframe内のfb iframeから呼び出します)。

クライアント側の認証を使用する代わりに、サーバー側のフローを使用できます。を使用してユーザーを oauth ダイアログにリダイレクトすることから開始されるため、プロセス全体が一番上のウィンドウで行われますwindow.top.location

プロセスが終了すると、facebook はユーザーを redirect_uri にリダイレクトし、そこでユーザーを好きな場所にリダイレクトできます。

これが役立つことを願っています。また、 Facebook プラットフォーム ポリシーには次のように記載されていることに注意してください。

13 . Facebook の Canvas または Page Tab アプリの主な目的は、単にユーザーを Facebook エクスペリエンスから外部サイトにリダイレクトすることであってはなりません。

于 2012-05-22T16:39:18.873 に答える