如何检测是否在chrome中阻止了弹出窗口

时间:2012-01-10 11:17:48

标签: javascript popup

我正在尝试加载facebook auth页面,以便用户将他们的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

的解决方案

5 个答案:

答案 0 :(得分:7)

基本上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/

答案 1 :(得分:6)

我正在搜索和搜索,最后发现了这个,所以我不得不分享,因为其他人说它在新版本的Chrome中被破坏了。所以固定的解决方案是:

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

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

答案 3 :(得分:0)

简单:

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

答案 4 :(得分: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);
相关问题