Tout d'abord, pour clic événements, vous devez créer un objet événement avec le type MouseEvents
, non HTMLEvents
et utiliser event.initMouseEvent
au lieu de event.initEvent
.
Pour accéder au document
de l'onglet en cours de Firefox à partir d'une superposition XUL, vous pouvez utiliser la propriété content.document
, mais puisque vous avez déjà accès à l'élément DOM que vous voulez cliquer, vous pouvez utiliser la propriété Node.ownerDocument
, qui sera reportez-vous à l'objet document
de niveau supérieur pour ce noeud.
J'ai fait une fonction simple pour simuler 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);
}
Utilisation:
triggerMouseEvent(element, 'click');
Vérifiez une utilisation des tests here.
Vous pouvez également transmettre un objet comme troisième argument si vous souhaitez modifier les valeurs des propriétés event object.
Je m'excuse car votre réponse a parfaitement fonctionné! J'espère que je l'ai récompensé à temps. – Alex
ne vous inquiétez pas, il était parfaitement à l'heure !, je suis content que ma réponse a bien fonctionné pour vous, merci beaucoup! – CMS