事件处理程序在Javascript中有哪些特权?

事件处理程序在Javascript中有哪些特权?,javascript,dom,browser,event-handling,dom-events,Javascript,Dom,Browser,Event Handling,Dom Events,假设您有一个函数用于打开example.com: function openExampleCom() { window.open('http://example.com'); } 如果您只是尝试从代码或开发人员控制台运行它 openExampleCom(); 浏览器可能会阻止不需要的弹出窗口,而不是打开example.com。但是如果您运行相同的函数来响应,比如说,单击-event document.onclick = openExampleCom; 浏览器可能会打开example

假设您有一个函数用于打开
example.com

function openExampleCom() {
    window.open('http://example.com');
}
如果您只是尝试从代码或开发人员控制台运行它

openExampleCom();
浏览器可能会阻止不需要的弹出窗口,而不是打开
example.com
。但是如果您运行相同的函数来响应,比如说,
单击
-event

document.onclick = openExampleCom;
浏览器可能会打开
example.com
,以响应您在新选项卡/窗口中毫不犹豫的单击


我的问题是:哪些案例/事件是特殊的/“特权的”(如
单击
-事件处理程序)以及它们有哪些“特权”(如
窗口。不受限制地打开

窗口。只有在任何用户操作的结果调用它时才允许打开。这只是一个惯例,大约10年前,由于“狂野西部”的大量弹出式站点而产生。当调用
window.open
时,浏览器会查看调用堆栈以检查它是否被用户事件调用。因此,这与其说是事件处理程序的特权,不如说是
窗口的一项功能。open
@PrashanthChandra,所以,
窗口。open
是唯一的特例?更正我之前的评论,此功能是弹出窗口阻止程序的一项功能,不是任何正式标准的一部分。这种行为也会因弹出窗口拦截器、用户配置和扩展等的不同而有很大的不同。过时了,但显示了被认为“讨厌”和被阻止的功能列表。但从我所知道的情况来看,大多数其他浏览器中从未存在过的浏览器和存在的浏览器(如showModalDialog)都已被弃用或删除,因此只有
window。open
仍保留
window。open
仅在任何用户操作后被调用时才被允许。这只是一个惯例,大约10年前,由于“狂野西部”的大量弹出式站点而产生。当调用
window.open
时,浏览器会查看调用堆栈以检查它是否被用户事件调用。因此,这与其说是事件处理程序的特权,不如说是
窗口的一项功能。open
@PrashanthChandra,所以,
窗口。open
是唯一的特例?更正我之前的评论,此功能是弹出窗口阻止程序的一项功能,不是任何正式标准的一部分。这种行为也会因弹出窗口拦截器、用户配置和扩展等的不同而有很大的不同。过时了,但显示了被认为“讨厌”和被阻止的功能列表。但是,从我所知道的情况来看,其他浏览器中从未存在过的大多数浏览器(如showModalDialog)都已被弃用或删除,因此只保留了
window.open