私はFacebookとの統合のウェブサイトを持っています。ホームページには人気のあるいくつかのLikeボタンとログインしていないログインボタンがあります。私は事実上のログインボタンになるLikeボタンにイベントを添付したいと思います。つまり、Facebookがやっていることに加えて、私は自分のアプリケーションの拡張アクセス権を要求する機会を得たいと思っています。私のアプリが好きなボタンをクリックするとFB権限をリクエストする方法はありますか?
それは仕事、そしてここで私は理由について知っていることだしません: FB.Event.subscribe(「edge.create」、機能(:私は次の呼び出しを使用してクリックを聞いている
- obj){/ *私のコールバック* /});
- FacebookがFINISHESでクリックを処理するときに、edge.createイベントが発生します。
- Facebookはクリックを非同期に処理し、リクエスト - レスポンスサイクルの完了時に延期します。
- この非同期待機の後に実行されるJavascriptコードは、同じスタックの一部ではなく、ユーザーアクションによって与えられる祝福がありません。
- Facebookが拡張アクセス権を要求するために提供する手段には、ポップアップウィンドウの作成が含まれます。ほとんどの最新のブラウザには、ユーザーアクションによってトリガーされたスタック外の呼び出しを拒否するポップアップブロッカーが含まれています。
このチェーンにより、edge.createで処理されたハンドラは拡張アクセス権を要求できなくなります。 、Facebookがクリックを受け取った後
- は、元のクリックをリッスンするための方法を探すのではなく、要求を送信し、応答を受信し、そして最終的にはグローバルハンドラに
- を発射:私は解決策の二つのクラスを考えることができますポップアップを含まないアクセス権を要求する別のUIを見つける
私が研究で見つけたものは、どちらも簡単な方法ではありませんでした。ソリューション1では、FBJSはaddEventListenerメソッドを提供しますが、FBJSには私のケース(私が所有するウェブサイト上での統合)とは何の関係もないので、クリックを捕らえるために使用することはできません。溶液2に、FB.loginのためのFacebookの独自のマニュアルは、次の言葉:
You should only call this on a user event as it opens a popup. Most browsers block popups, unless they were initiated from a user event, such as a click on a button or a link.
(出典:https://developers.facebook.com/docs/reference/javascript/FB.login/)
だから私は死んで終わりだが、それはひどく人工問題のように思えます - んFacebookはLikeボタンをクリックすると権限を要求できるようにしたいのですか?もしそうなら、私は何が欠けていますか?そうでない場合、なぜUIレイヤーでこの制限を実装していますか?