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