为了账号安全,请及时绑定邮箱和手机立即绑定

检测Chrome中阻止的弹出窗口

检测Chrome中阻止的弹出窗口

神不在的星期二 2019-08-30 15:10:42
我知道javascript技术可以检测弹出窗口是否在其他浏览器中被阻止(如本问题的答案中所述)。这是基本测试:var newWin = window.open(url);if(!newWin || newWin.closed || typeof newWin.closed=='undefined'){     //POPUP BLOCKED}但这在Chrome中无效。弹出窗口被阻止时,永远不会到达“POPUP BLOCKED”部分。当然,测试工作到一定程度,因为Chrome实际上并没有阻止弹出窗口,而是在右下角的一个微小的窗口中打开它,列出“阻塞”弹出窗口。我想做的是能够判断弹出窗口是否被Chrome的弹出窗口拦截器阻止。我试图避免浏览器嗅探,以支持功能检测。有没有办法在没有浏览器嗅探的情况下做到这一点?编辑:现在我已经尝试利用的newWin.outerHeight,newWin.left以及其他类似性质的做到这一点。当弹出窗口被阻止时,Google Chrome会将所有位置和高度值返回为0。不幸的是,即使弹出窗口实际打开了一段未知的时间,它也会返回相同的值。经过一段神奇的时期(在测试中几秒钟),位置和大小信息将作为正确的值返回。换句话说,我仍然没有更接近解决这个问题。任何帮助,将不胜感激。
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

对InvisibleBacon的snipet只进行了一次改进(在IE9,Safari 5,Chrome 9和FF 3.6中测试过):


var myPopup = window.open("popupcheck.htm", "", "directories=no,height=150,width=150,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,top=0,location=no");

if (!myPopup)

    alert("failed for most browsers");

else {

    myPopup.onload = function() {

        setTimeout(function() {

            if (myPopup.screenX === 0) {

                alert("failed for chrome");

            } else {

                // close the test window if popups are allowed.

                myPopup.close();  

            }

        }, 0);

    };

}


查看完整回答
反对 回复 2019-08-30
  • 3 回答
  • 0 关注
  • 978 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信