Firefox扩展程序生成的事件是否“受信任”?

时间:2012-07-12 16:49:40

标签: firefox javascript-events firefox-addon

我的Firefox扩展程序会生成事件,例如单击。作为响应,Web应用程序尝试打开一个新窗口。然而,当弹出窗口阻止程序启动时,它会被Firefox阻止。但是,如果我手动点击一个按钮并在Web应用程序尝试打开窗口时响应,那么它就会通过。

我的问题是为什么我的扩展程序生成的事件不会被视为“受信任”,并且在用户点击时会以相同的方式处理?是否有一些后门来实现这种行为?

1 个答案:

答案 0 :(得分:6)

修改:这个答案已经过时了。它指的是Firefox 57不再支持的经典扩展。基于Web Extensions API的扩展程序为no way of generating trusted events

是的,扩展程序生成的事件始终是受信任的。这意味着event.isTrusted将为true,并且事件将能够触发需要受信任事件的操作(例如,Ctrl-Tab keypress事件以切换浏览器选项卡)。但是,它们保留了合成事件,这意味着没有与之关联的本机(OS级别)事件。由于弹出窗口阻止程序适用于本机事件,因此它不会看到您的扩展程序生成的事件。

您可以使用nsIDOMWindowUtils.sendMouseEventToWindow()代替document.createEvent()。此方法用于测试,也将生成本机事件。对弹出窗口阻止程序来说这应该足够了。

var utils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                  .getInterface(Components.interfaces.nsIDOMWindowUtils);
utils.sendMouseEventToWindow("click", 10, 20, 0, 1, 0);