Javascript Java脚本检测IE11中的弹出窗口阻止程序
如何在JavaScript中检查internet explorer 11弹出窗口阻止程序是否已启用? 我使用下面的代码来检测弹出窗口拦截器。它在chrome上运行良好,但在InternetExplorer 11上运行不正常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
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
返回值)。如果这回答了您的问题(堆栈溢出的工作方式),您可以通过单击旁边的复选标记来“接受”答案,从而将其从未回答问题列表中删除。但前提是你的问题真的得到了回答。快乐编码!