我的 Firefox 扩展会生成事件,例如点击。作为响应,Web 应用程序尝试打开一个新窗口。然而,当弹出窗口阻止程序启动时,它会被 Firefox 阻止。但是,如果我手动单击一个按钮并响应该按钮,当网络应用程序尝试打开窗口时,它就会通过。
我的问题是为什么我的扩展生成的事件不被视为“可信”,并且在用户点击时以相同的方式处理?是否有一些后门可以实现这种行为?
编辑:这个答案已经严重过时了。它指的是从 Firefox 57 开始不再支持的经典扩展。基于 Web 扩展 API 的扩展无法生成可信事件。
是的,扩展生成的事件始终是可信的。这意味着 event.isTrusted
true
并且事件将能够触发需要可信事件的操作(例如,使用 Ctrl-Tab
keypress
事件来切换浏览器选项卡)。但是,它们仍然是合成事件,这意味着没有与它们关联的本机(操作系统级别)事件。由于弹出窗口拦截器适用于本机事件,因此它不会看到您的扩展生成的事件。您可以使用 nsIDOMWindowUtils.sendMouseEventToWindow()而不是
document.createEvent()
。此方法用于测试,并且也会生成本机事件。这对于弹出窗口拦截器来说应该足够了。
var utils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindowUtils);
utils.sendMouseEventToWindow("click", 10, 20, 0, 1, 0);