如果我用jquery发起点击,它会被弹出阻止程序阻止,如果我手动点击,窗口不会被阻止。两者之间的浏览器有何不同?
上详细讨论了 Firefox 的实现,并且 this other bug 有一些更有趣的背景,包括网站为了向毫无戒心的用户强加不需要的弹出窗口而需要花费多长时间(在本例中) :从图像 window.open()
事件中调用
window.open()
)。如果您搜索 Bugzilla,您会发现 Mozilla 人员花了很多年才让这一切正常工作,例如 这是 2001 年的一个错误。 目前的工作方式是这样的:当 Firefox 收到来自操作系统的点击事件时,在一段时间内 JavaScript 中会启用
load
(在
window.open()
中查找 dom.disable_open_click_delay
)。如果您在没有用户点击的情况下从代码中调用 about:config
事件,那么第一步,永远不会启用 click()
,尽管对 window.open()
的调用本身会成功 以阻止网站检测到您启用了弹出窗口阻止功能. 我不确定其他浏览器是如何实现这些东西的,但如果它有很大不同,我会感到惊讶。
window.open()
实际上并不会真正触发元素上的点击,而是调用监听点击的函数。因此,尽管您正在调用
click
,但实际上您只是在调用一个函数。当用户点击时,才是真正的点击。
示例:
click()
我的猜测是,事件附加了一些隐藏数据(无法从 javascript 访问),这些数据可以让浏览器跟踪事件是否是通过真正的鼠标单击启动的,尽管也可能有其他实现机制。