Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Java脚本检测IE11中的弹出窗口阻止程序_Javascript - Fatal编程技术网

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

Javascript Java脚本检测IE11中的弹出窗口阻止程序,javascript,Javascript,如何在JavaScript中检查internet explorer 11弹出窗口阻止程序是否已启用? 我使用下面的代码来检测弹出窗口拦截器。它在chrome上运行良好,但在InternetExplorer 11上运行不正常 var newWindow = open('/', 'example', 'width=300,height=300') if (newWindow===null || typeof(newWindow)==="undefined" || newWindow === fals

如何在JavaScript中检查internet explorer 11弹出窗口阻止程序是否已启用? 我使用下面的代码来检测弹出窗口拦截器。它在chrome上运行良好,但在InternetExplorer 11上运行不正常

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

我能想到的唯一可靠的方法是将您打开的窗口作为测试调用,通过其
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
函数的名称进行一些管理,可能每次都会生成名称并将其作为查询参数传递。)

欢迎使用Stack Overflow!这一次我已经为您解决了这个问题,但当您提出问题时,文本区域右侧有一个大橙色的“如何设置格式”框,其中包含有用的信息。还有一个完整的格式化工具条。还有一个[?]按钮提供格式化帮助。还有一个预览区,位于文本区和“发布你的问题”按钮之间(这样你就必须滚动过去才能找到按钮,以鼓励你查看),显示你的帖子发布时的样子。始终最好确保您的问题清晰易读。:-)旁注:带有大量
|
if
可以简单地替换为:
if(!newWindow)
。检查
newWindow
是否为错误值。您的
|
版本会显式检查除
NaN
之外的所有falsy值,但是
newWindow
将是对象引用或
null
,而不是其他falsy值中的任何一个,因此这太过分了。谢谢,您的解决方案在CHrome和Opera上有效,但在IE 11上无效。请help@kondrap-这没有给我提供任何信息。什么方面不起作用?您收到了什么错误消息?当你单步执行代码时会发生什么?@kondrap-对我来说非常适合(包括在IE11中):@kondrap-不用担心!我学到了一些东西(当被阻止时,Chrome上的
open
返回值)。如果这回答了您的问题(堆栈溢出的工作方式),您可以通过单击旁边的复选标记来“接受”答案,从而将其从未回答问题列表中删除。但前提是你的问题真的得到了回答。快乐编码!