从Firefox浏览器扩展触发事件?

Ale*_*lex 2 javascript firefox-addon dom-events

我想从firefox扩展中触发事件,特别是单击事件.我已经尝试过jQuery .click()以及整个:

 var evt = document.createEvent("HTMLEvents");
 evt.initEvent("click", true, false );
 toClick[0].dispatchEvent(evt);
Run Code Online (Sandbox Code Playgroud)

这对我不起作用,我想知道这是否可行?(从firefox扩展触发事件)?

我认为这可能与我创建活动的文件有关......但我不确定.

如果是这样,那怎么做呢?

CMS*_*CMS 5

首先,对于点击事件,你需要创建一个事件对象类型MouseEvents,而不是HTMLEvents和使用event.initMouseEvent代替event.initEvent.

要从documentXUL叠加层访问Firefox的当前选项卡,您可以使用该content.document属性,但由于您已经可以访问要单击的DOM元素,因此可以使用该Node.ownerDocument属性,该属性将引用顶级document对象对于这个节点.

我已经做了一个简单的函数来模拟MouseEvents:

function triggerMouseEvent(element, eventName, userOptions) {
  var options = { // defaults
    clientX: 0, clientY: 0, button: 0,
    ctrlKey: false, altKey: false, shiftKey: false,
    metaKey: false, bubbles: true, cancelable: true
     // create event object:
  }, event = element.ownerDocument.createEvent("MouseEvents");

  if (!/^(?:click|mouse(?:down|up|over|move|out))$/.test(eventName)) {
    throw new Error("Only MouseEvents supported");
  }

  if (typeof userOptions != 'undefined'){ // set the userOptions
    for (var prop in userOptions) {
      if (userOptions.hasOwnProperty(prop))
        options[prop] = userOptions[prop];
    }
  }
  // initialize the event object
  event.initMouseEvent(eventName, options.bubbles, options.cancelable,
                       element.ownerDocument.defaultView,  options.button,
                       options.clientX, options.clientY, options.clientX,
                       options.clientY, options.ctrlKey, options.altKey,
                       options.shiftKey, options.metaKey, options.button,
                       element);
  // dispatch!
  element.dispatchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

用法:

triggerMouseEvent(element, 'click');
Run Code Online (Sandbox Code Playgroud)

在这里检查测试用法.

如果要更改事件对象属性的值,也可以将对象作为第三个参数传递.