Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止弹出窗口被阻止_Javascript_Facebook_Popup - Fatal编程技术网

Javascript 防止弹出窗口被阻止

Javascript 防止弹出窗口被阻止,javascript,facebook,popup,Javascript,Facebook,Popup,我在页面加载代码中使用了Facebook登录方法,但当我执行此代码时,弹出窗口拦截器会关闭Facebook权限窗口 如何使用Javascript打开此窗口,而无需在弹出窗口阻止程序中创建异常 下面是我的代码: FB.login(function(response) { if(response.session!=null) { window.location.href='http://example.com'; } }, { perms: 'email,us

我在页面加载代码中使用了Facebook登录方法,但当我执行此代码时,弹出窗口拦截器会关闭Facebook权限窗口

如何使用
Javascript
打开此窗口,而无需在弹出窗口阻止程序中创建异常

下面是我的代码:

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

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

如果您只需对弹出窗口拦截器进行编码,那么现有的弹出窗口拦截器就没有意义了。您需要找到一种不使用弹出窗口的方法,或者需要用户与浏览器进行一些交互才能打开弹出窗口。

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

只能在用户事件打开弹出窗口时调用此选项。大多数浏览器都会阻止弹出窗口,除非它们是从用户事件(如单击按钮或链接)启动的


这也是一种糟糕的用户体验。

你可以做类似的事情-

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

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

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

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

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

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


是的,阿纳布!它可以通过点击事件处理,但我需要在页面加载时显示。有什么想法吗???试试
document.getElementById('shareButtonId')。单击()
我不想使用用户交互,在单击我的邀请链接后,请访问我的主页,在那里我想在没有任何用户交互的情况下显示facebook权限弹出窗口。任何人都有在iframe中显示facebook权限弹出窗口的想法,它可以解决弹出窗口拦截器问题。有什么?在重定向oauth URI中,使用额外的GET参数“scope”,在此处查看可能的答案:有趣,但您在哪里请求特定权限,如“{perms:'email,user\u birth,publish\u stream'}”。检查我强烈不同意这是“简单的糟糕用户体验”。避免弹出窗口不那么突兀,特别是在用户已经连接到Facebook的情况下,弹出窗口会快速出现和消失。我认为UX设计最好为oauth重定向,而不是打开一个弹出窗口。。。我所说的是关于用户发起的交互,我没有注意到OP正在寻找一种通过Facebook秘密授权他们的方式。