0

我遇到了 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;
4

2 回答 2

1

当启用弹出窗口阻止程序时,使 window.open() 返回一个假窗口对象有(或曾经)两个很好的理由:

  1. 某些网站/应用程序可能会尝试检测弹出窗口阻止并强制用户禁用阻止程序并忍受广告和其他滥用

  2. 回到我们实现弹出窗口阻止的时候,我们经常看到如果没有返回对象就会中断的脚本。即,如果他们想检查 win.closed 但“win”设置为未定义。

由于某些浏览器以不同的方式实现弹出窗口阻止,因此可能不再需要此“功能”。

于 2013-02-07T10:11:29.627 回答
0

Opera 和 Chrome 从 中返回一个对象window.open(),即使弹出窗口被阻止,因此执行将直接跳转到else这些浏览器中的 。这意味着,您无法使用当前代码检测 Chrome 或 Opera 中是否启用了弹出窗口阻止程序。

但是,您可以尝试popupTest检测about:blank.

var isPopup = false,
    popupTest = window.open(...);
try {
    if (popupTest.document.getElementById('a_known_id')) {
        isPopup = true;
    }
} catch (err) {isPopup = false;}
if (isPopup) {...}
于 2013-02-08T17:33:59.463 回答