防止弹出窗口被阻止

时间:2011-02-10 11:14:54

标签: 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' });

5 个答案:

答案 0 :(得分: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");
      }

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

答案 1 :(得分:15)

在文档中明确否定了这一点:

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

这也只是糟糕的用户体验。

答案 2 :(得分:6)

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

答案 3 :(得分: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 -->

答案 4 :(得分:5)

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