【问题标题】:How do I detect whether popups are blocked in chrome如何检测弹出窗口是否在 chrome 中被阻止
【发布时间】:2012-01-10 11:17:47
【问题描述】:

我正在尝试加载 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的解决方案

【问题讨论】:

标签: javascript popup


【解决方案1】:

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/

【讨论】:

  • 这在 Chome 的较新版本中显然已被破坏。至少在“19.0.1084.52 m”中对我不起作用
【解决方案2】:

我一直在搜索和搜索,终于找到了这个,所以我不得不分享,因为就像其他人说它在新版本的 chrome 中被破坏了。所以固定的解决方案是这样的:

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

【讨论】:

  • 对我来说 popUp.outerHeight 是“未定义”
【解决方案3】:

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

        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
        }

【讨论】:

    【解决方案4】:

    简单:

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

    【讨论】:

      【解决方案5】:

      这个解决方案对我很有效:

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

      【讨论】:

        猜你喜欢
        • 2010-10-14
        • 2013-05-08
        • 2010-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 1970-01-01
        相关资源
        最近更新 更多