我对Chrome和Opera有一个问题,我似乎无法找到解决方法。我有一个带有javascript的弹出窗口拦截器检测器,如果启用了阻止程序,它将在div中打印出“请为此站点启用弹出窗口”。这适用于FF,Safari和IE,但不适用于Chrome和Opera。在这两个浏览器中,我确实将div折叠显示但内部没有文本。有人为此工作并知道发生了什么事吗?谢谢!
JS
function detectPopupBlocker() {
var alertDiv = document.getElementById('popupAlert');
console.log(alertDiv); // This prints to the console in Chrome and Opera
var popupTest = window.open("about:blank","","directories=no,height=100,width=100,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,top=0,location=no");
if (!popupTest) {
alertDiv.innerHTML += 'Your popup blocker is detected.<br />Please enable popups for this site.';
} else {
popupTest.close();
}
}
window.onload = detectPopupBlocker;
答案 0 :(得分:1)
启用弹出窗口阻止程序时,有一个(或有)两个很好的理由使window.open()返回一个伪窗口对象:
某些网站/应用可能会尝试检测弹出窗口阻止功能并强制用户停用广告拦截器并忍受广告和其他滥用行为
当我们实现弹出窗口阻止时,我们经常看到如果没有返回对象会破坏的脚本。即如果他们想检查win.closed,但'win'设置为undefined。
由于某些浏览器以不同方式实现弹出窗口阻止,因此可能不再需要此“功能”。
答案 1 :(得分:0)
Opera和Chrome会从window.open()
返回一个对象,即使弹出窗口被阻止,因此执行将直接跳转到这些浏览器中的else
。这意味着,您无法使用当前代码检测Chrome或Opera中是否启用了弹出窗口拦截器。
但是,如果popupTest
中有可用的已知元素,您可以尝试检测,但在这种情况下,您需要将实际文件加载到弹出窗口而不是about:blank
。< / p>
var isPopup = false,
popupTest = window.open(...);
try {
if (popupTest.document.getElementById('a_known_id')) {
isPopup = true;
}
} catch (err) {isPopup = false;}
if (isPopup) {...}