Запустить события из расширения браузера Firefox?
Я хочу запускать события из расширения Firefox, в частности, события клика. Я пробовал JQuery's .click()
а также в целом:
var evt = document.createEvent("HTMLEvents");
evt.initEvent("click", true, false );
toClick[0].dispatchEvent(evt);
Это не работает для меня, и мне было интересно, если это вообще возможно? (для запуска событий из расширения Firefox)?
Я думаю, что это может иметь какое-то отношение к тому документу, на котором я создаю мероприятие... но я не уверен.
Если так, то как это сделать?
1 ответ
Прежде всего, для событий клика вам нужно создать объект события с типом MouseEvents
не HTMLEvents
и использовать event.initMouseEvent
вместо event.initEvent
,
Чтобы получить доступ к document
текущей вкладки Firefox из оверлея XUL, вы можете использовать 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);
}
Использование:
triggerMouseEvent(element, 'click');
Проверьте использование теста здесь.
Вы также можете передать объект в качестве третьего аргумента, если хотите изменить значения свойств объекта события.