2012-01-10 117 views
1

我试图加载facebook认证页面供用户连接他们的fb账户与我的网站。问题是它是一个不同的领域。代码如下我如何检测弹出窗口是否被阻塞在铬

var left = (screen.width/2)-(550/2); 
    var top = (screen.height/2)-(250/2); 
    fbPopUp = window.open(authorizeURL,'fbWindow','menubar=0,status=0,titlebar=0,toolbar=0,resizable=1,width=400,height=275, top='+top+' , left='+left); 

如何找出这个窗口是否实际打开? 我试过Detect blocked popup in Chrome

+0

的[检测阻止弹出在Chrome]可能重复(http://stackoverflow.com/questions/ 668286 /检测阻止弹出在铬) – 2013-07-25 15:53:37

回答

6

的解决方案基本上在Chrome中有一个错误。虽然它隐藏了弹出窗口,但它仍然会执行,并且仍然会返回窗口对象 - 所以常规检查不起作用。

这里是为我工作的解决方案:

var popup = window.open(url); 

if (popup) { 
    popup.onload = function() { 
    console.log(popup.innerHeight > 0 ? 'open' : 'blocked'); 
    } 
} else { 
    console.log('blocked'); 
} 

工作示例这里:http://jsbin.com/uticev/3/

+2

这显然已在新版本的Chome中破坏。 “19.0.1084.52 m”至少对我无效 – AHM 2012-05-30 15:54:03

+1

它也不适用于Chrome '21.0.1180.77 m' – Smit 2012-08-15 07:23:25

+0

不适用于Chrome 25.0.1364.172。 – Javaguru 2013-05-22 07:05:45

6

我寻寻觅觅,终于找到这一点,所以我不得不分享,监守像其他人说,它在更新版本的Chrome中被破解。所以固定的解决方案是这样的:

var popUp = window.open(url); 
setTimeout(function() { 
    if (popUp.outerHeight === 0) { 
     alert('blocked'); 
    } 
}, 25); 
+0

对我来说popUp.outerHeight是'undefined' – Roman 2013-07-16 21:34:55

2

刚刚修改雷米的答案。这对我有用。

 var win = window.open("", 'child','width=10,height=10,status=no,resizable=no'); 
     var objwin = new RegExp('object','gi'); 
     var isblock = false; 

     if(objwin.test(String(win))) { 
      if(typeof win.outerHeight ==="undefined" || parseInt(win.outerHeight)<10){ 
       isblock = true; 
      } 
      win.close(); 
     }else{ 
       isblock = true; 
     } 

     if(isblock){ 
      // do something here 
     } 
0

简单:

var popup = window.open(host); 
popup.onload = function(){ 
    if (!popup.innerHeight > 0){ 
     popup.close(); 
     // Popup blocked 
    } else { 
     // Popup enabled 
    } 
} 
0

这个解决方案很适合我:

loginWindow = window.open(url, '_blank', options); 

setTimeout(function() { 
    if (!loginWindow || loginWindow.closed || typeof loginWindow.closed == 'undefined' || parseInt(loginWindow.outerWidth) == 0) { 
     alert('Turn off pop-up blocker and try again.'); 
    } 
    else { 
     loginWindow.focus(); 
    } 
}, 500); 
+0

对firefox/opera/IE来说,这是否也适用? – hipkiss 2016-06-10 09:35:06

相关问题