web-dev-qa-db-ja.com

ポップアップがブロックされないようにする

ページの読み込み時にコードでFacebookのログイン方法を使用していますが、このコードを実行すると、ポップアップブロッカーがFacebookのアクセス許可ウィンドウを閉じます。

ポップアップブロッカーで例外を作成せずに、このウィンドウをJavascriptで開くにはどうすればよいですか?

以下は私のコードです:

FB.login(function(response)
{
    if(response.session!=null)
    {
        window.location.href='http://example.com';
    }
},
{ perms: 'email,user_birthday,publish_stream' });
12
Seema

あなたは次のようなことをすることができます-

var uri = encodeURI('http://example.com');
FB.getLoginStatus(function(response) {
      if (response.status === 'connected') {
                window.location.href=uri;
      } else {
         window.location = encodeURI("https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri="+uri+"&response_type=token");
      }

これは、ポップアップを開く代わりに直接リダイレクトします

20
Rahul

これは、ドキュメントでは特に否定されています。

「これはポップアップを開くときにのみユーザーイベントで呼び出す必要があります。ボタンやリンクのクリックなどのユーザーイベントから開始された場合を除き、ほとんどのブラウザはポップアップをブロックします。」

それは単に貧弱なUXでもあります。

15
dubilla

ポップアップブロッカーの周りにコーディングできれば、ポップアップブロッカーが存在しても意味がありません。ポップアップを使用しないメソッドを見つけるか、ポップアップを開くためにブラウザとのユーザー操作が必要になります。

6
Anthony Grist

ええ、ユーザーイベントで呼び出す必要がありますが、厳密にはonclickイベントであり、他のイベントではありません。

<a href="#" onclick="fbLogin()"> Login</a> <!-- works -->

<a href="#" onmousedown="fbLogin()"> Login</a> <!-- doesnt work -->

<a href="#" onmouseup="fbLogin()"> Login</a> <!-- doesnt work -->
6

ポップアップを自動的に開こうとすると、ポップアップブロッカーがアクティブになる可能性が高くなります。私の知る限り、ボタンのクリックなどのユーザーアクションに基づいている必要があります。ボタンをクリックしてこのコードを実行してみてください。動作するはずです。

5
Arnab