Chrome 不会阻止我用 javascript 打开的每个弹出窗口

Chrome doesn't block every popup I'm opening with javascript

我已经在 Angularjs 服务中编写了代码:

.factory('NativePopup', function($rootScope){

    function open(data){
        var ref = window.open("components/modal-attesa.html", data.title, data.arg);

        if(!ref){
            $rootScope.showNotification({type: "error", message: "please enable popup"});
        }            
        return ref;
    }

    function close(ref){
        ref.close();
    }

    return {
        open: open,
        close: close
    }

})

而且我已经把chrome设置成"Block every pop-up",无一例外。现在,当我调用 open 方法时

NativePopup.open(blah)

不管怎样,chrome总是会答应的。但是如果我在 open 方法的第一行放置一个断点,那么我 运行 在我的控制台中使用完全相同的代码,然后 chrome 阻止它。

谁能给我解释一下这种行为?

如果您指的是 Chrome 在“设置”>“隐私”>“内容设置”下的 "Do not allow any site to show pop-ups",那不适用于在 direct 中打开的弹出窗口响应用户操作,例如单击。例如,如果用户做了一些积极的动作, 事件处理程序期间,JavaScript 代码调用 window.open,它不被视为 "popup"由该设置控制。

例如,这个 window.open 会起作用(可能受某些 rate-limiting 影响):

someElement.addEventListener("click", function() {
    window.open(/*...*/);
});

但是这个不会:

someElement.addEventListener("mouseover", function() {
    window.open(/*...*/);
});

...因为 mouseover 不被认为是允许它的足够积极的用户操作。

这是完全禁用 window.open 和允许 willy-nilly 之间的 highly-successful 折衷,并且是大多数现代浏览器的默认设置。