防止弹出窗口被阻止

See*_*ema 12 javascript facebook popup

我在页面加载的代码中使用Facebook登录方法,但是当我执行此代码时,弹出窗口阻止程序会关闭Facebook权限窗口.

如何在Javascript不需要在弹出窗口阻止程序中例外的情况下打开此窗口?

以下是我的代码:

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

Rah*_*hul 20

你可以做点什么 -

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");
      }
Run Code Online (Sandbox Code Playgroud)

这只是直接重定向而不是打开弹出窗口


dub*_*lla 15

这在文档中明确否定:

"你应该只在用户事件上调用它,因为它会打开一个弹出窗口.大多数浏览器会阻止弹出窗口,除非它们是从用户事件启动的,例如点击按钮或链接."

它也只是糟糕的用户体验.


Ant*_*ist 6

如果你可以只围绕它们进行编码,那么弹出窗口拦截器就没有意义了.您需要找到一个不使用弹出窗口的方法,或者需要与浏览器进行某些用户交互才能打开弹出窗口.


小智 6

是的,你需要用一个用户事件调用它,但严格来说是onclick事件,而不是任何其他事件:

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

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

<a href="#" onmouseup="fbLogin()"> Login</a> <!-- doesnt work -->
Run Code Online (Sandbox Code Playgroud)


Arn*_*nab 5

如果您尝试自动打开弹出窗口,那么弹出窗口阻止程序很可能会被激活,据我所知,它必须基于某些用户操作,例如单击按钮.尝试单击按钮执行此代码,它应该工作.