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 折衷,并且是大多数现代浏览器的默认设置。
我已经在 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 折衷,并且是大多数现代浏览器的默认设置。