从Firefox浏览器扩展触发事件? [英] Trigger events from Firefox browser extension?

查看:144
本文介绍了从Firefox浏览器扩展触发事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

这不适合我,我想知道这是否可能? (从Firefox的扩展触发事件)?

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

如果是这样,一个人怎么做?

首先,对于点击事件,您需要创建一个类型为 MouseEvents 的事件对象,而不是 HTMLEvents ,然后使用 event.initMouseEvent event.initEvent 。



访问你可以使用 > content.document 属性,但由于您已经有权访问要单击的DOM元素,因此您可以使用 Node.ownerDocument 属性,它将引用顶层文档这个节点的对象。



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

  function triggerMouseEvent(element,eventName,userOptions){
var options = {//默认值
clientX:0,clientY:0,按钮:0,
ctrlKey:false,altKey :false,shiftKey:false,
metaKey:false,bubbles:true,cancelable:true
//创建事件对象:
},event = element.ownerDocument.createEvent(MouseEvents) ;

if(!/ ^(?:单击鼠标(?:down | up | move | out))$ /。test(eventName)){
throw new Error 仅支持MouseEvents); $($)


if(typeof userOptions!='undefined'){//设置userOptions
(userOptions中的var prop){
if(userOptions.hasOwnProperty (prop))
options [prop] = userOptions [prop];


//初始化事件对象
event.initMouseEvent(eventName,options.bubbles,options.cancelable,
element.ownerDocument.defaultView,options。按钮,
options.clientX,options.clientY,options.clientX,
options.clientY,options.ctrlKey,options.altKey,
options.shiftKey,options.metaKey,options.button,
元素);
//发送!
element.dispatchEvent(event);

$ / code $ / pre

用法:

  triggerMouseEvent(element,'click'); 

检查测试用法的值href =https://developer.mozilla.org/zh/DOM/event =nofollow noreferrer>事件对象属性。


I want to trigger events from a firefox extension, specifically click events. I've tried jQuery's .click() as well as the whole:

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

This is not working for me, and I was wondering if this is even possible? (to trigger events from a firefox extension)?

I think it may have something to do with what document I create the event on...but I'm not sure.

If so, how does one do it?

解决方案

First of all, for click events, you need to create an event object with type MouseEvents, not HTMLEvents, and use event.initMouseEvent instead of event.initEvent.

To access the document of the current tab of Firefox from a XUL overlay, you can use the content.document property, but since you already have access to the DOM element you want to click, you can use the Node.ownerDocument property, which will refer to the top-level document object for this node.

I have made a simple function to simulate 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);
}

Usage:

triggerMouseEvent(element, 'click');

Check a test usage here.

You can pass also an object as the third argument, if you want to change the values of the event object properties.

这篇关于从Firefox浏览器扩展触发事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆