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

Sun*_*wal 7 firefox firefox-addon dom-events

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

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

Wla*_*ant 6

编辑:这个答案已经过时了.它指的是Firefox 57不再支持的经典扩展.基于Web Extensions API的扩展无法生成可信事件.

是的,扩展生成的事件始终是可信的.这意味着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);
Run Code Online (Sandbox Code Playgroud)

  • "是的,扩展程序生成的事件始终是可信的." - 你能扩展一下吗?我试图这样做,使用我的扩展内容脚本内部的document.createEvent(),但isTrusted是假的.我很想知道是否有特定的方法或标准,例如扩展需要签名,或其他任何东西. (2认同)