代码之家  ›  专栏  ›  技术社区  ›  Alex

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

  •  2
  • Alex  · 技术社区  · 14 年前

    我想从一个火狐扩展触发事件,特别是点击事件。我试过jquery的 .click() 以及整个:

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

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

    我认为这可能与我在什么文档上创建事件有关……但我不确定。

    如果是这样,怎么做?

    1 回复  |  直到 14 年前
        1
  •  5
  •   Christian C. Salvadó    14 年前

    首先,为了 点击 事件,需要创建类型为的事件对象 MouseEvents 不是 HTMLEvents 及使用 event.initMouseEvent 而不是 event.initEvent .

    访问 document 在xul覆盖的firefox的当前选项卡中,您可以使用 content.document 属性,但由于您已经可以访问要单击的DOM元素,因此可以使用 Node.ownerDocument 属性,它将引用顶级 文件 此节点的对象。

    我做了一个简单的函数来模拟 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);
    }
    

    用途:

    triggerMouseEvent(element, 'click');
    

    检查测试使用情况 here .

    如果要更改 event object 性质。