Java脚本检测IE11中的弹出窗口阻止程序

时间:2018-05-26 14:26:27

标签: javascript

如何检查javacript天气是否启用了Internet Explorer 11弹出窗口阻止程序? 我使用下面的代码来检测弹出窗口阻止程序。它在chrome中工作正常但在 Internetnternet explorer 11

中没有
var newWindow = open('/', 'example', 'width=300,height=300')
if (newWindow===null || typeof(newWindow)==="undefined" || newWindow === false || newWindow ==="" || newWindow===0) {
    alert("popup  blocker enabled");
} 

1 个答案:

答案 0 :(得分:0)

我能想到的唯一可靠的方法是将您打开的窗口作为测试调用通过其opener属性返回主窗口。您弹出的页面中将包含以下脚本代码:

if (opener) {
    opener.poppedUp();
}

您的检测代码将遵循这些方针:

function openWithPopupDetection(options) {
    var newWindow = open(options.url, options.name, options.features);
    if (!newWindow) {
        // Chrome and similar, it didn't pop up
        setTimeout(options.callback, 0, false);
    } else {
        var popTimer = setTimeout(function() {
            // Give up on the popup...
            window.poppedUp = null;
            options.callback(false);
        }, AnAppropriateNumberOfMilliseconds);
        window.poppedUp = function() {
            // Popped up, clear the timer
            clearTimeout(popTimer);
            window.poppedUp = null;
            options.callback(true);
        };
    }
}

然后你会像这样使用它:

openWithPopupDetection({
    url: 'page.html',
    name: 'example',
    features: 'width=300,height=300',
    callback: function(flag) {
        if (!flag) {
            alert(/*...*/);
        }
    }
});

请注意,检测必然是异步的。由于它有时是异步的,请注意上面的内容始终是异步的。

(如果你可能有多个重叠调用,你需要对poppedUp函数的名称进行一些管理,每次都可能生成名称并将其作为查询传递参数。)