【问题标题】:Prevent pop-ups from being blocked防止弹出窗口被阻止
【发布时间】:2011-02-10 11:14:54
【问题描述】:

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

如何使用Javascript 打开这个窗口而不需要在弹出窗口阻止程序中进行异常处理?

下面是我的代码:

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

【问题讨论】:

  • 任何人都知道在 iframe 中显示 facebook 权限弹出窗口,它可能会解决弹出窗口阻止问题。有吗??
  • 在这里查看可能的答案:stackoverflow.com/questions/11779955/…

标签: javascript facebook popup


【解决方案1】:

你可以做类似的事情 -

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");
      }

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

【讨论】:

【解决方案2】:

文档中明确否认了这一点:

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

这也是糟糕的用户体验。

【讨论】:

  • 我强烈反对这是“糟糕的用户体验”。避免弹出窗口不太显眼,尤其是在用户已经连接到 Facebook 的情况下,弹出窗口会快速出现和消失。我会争辩说,为 oauth 重定向而不是打开一个弹出窗口是更好的 UX 设计。
  • 别在意我上面的评论......我所说的是关于用户发起的交互,我没有注意到 OP 正在寻找一种方法来 通过 Facebook 秘密地 授权他们。
【解决方案3】:

如果您可以围绕它们编写代码,那么现有的弹出窗口拦截器将毫无意义。您要么需要找到不使用弹出窗口的方法,要么需要与浏览器进行一些用户交互才能打开弹出窗口。

【讨论】:

  • 我不想使用用户交互,点击我的邀请链接后,被邀请者进入我的家,我想在没有任何用户交互的情况下显示 facebook 权限弹出窗口。
【解决方案4】:

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

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

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

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

    • 是的,阿纳布!它可以通过单击事件处理,但是我需要在页面加载时显示它。有什么想法???
    • 试试document.getElementById('shareButtonId').click()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    相关资源
    最近更新 更多