Как смоделировать щелчок на привязке с конкретным текстом, используя JavaScript в GreaseMonkey? - PullRequest
1 голос
/ 07 августа 2009

Предположим, я загружаю веб-страницу, которая содержит следующий якорь:

<a class="someClass" href="#" onClick="gotoPage('http://somepage.org')">Link</a>

Что я хочу: как только страница будет загружена, я хочу сгенерировать onClick для этого якоря, у которого есть текст «Ссылка».

Обратите внимание, что якорь не содержит идентификатора или имени, связанного с ним. Таким образом, document.getelementbyid или document.getelementbyname не будут работать.

Ответы [ 3 ]

3 голосов
/ 07 августа 2009

Вот что люди, кажется, делают , чтобы иметь возможность генерировать событие click в Firefox. Они расширяют прототип HTMLAnchorElement функцией click(), например:

HTMLAnchorElement.prototype.click = function() {
  var evt = this.ownerDocument.createEvent('MouseEvents');
  evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
  this.dispatchEvent(evt);
}

См. MDC для initMouseEvent().

Если у вас есть jQuery, вы также можете проверить trigger().

2 голосов
/ 07 августа 2009

Поскольку вы используете Greasemonkey, вы должны иметь возможность использовать XPath для выбора рассматриваемой ссылки, используя один из ее атрибутов HTML:

http://diveintogreasemonkey.org/patterns/match-attribute.html

1 голос
/ 28 сентября 2009

Решение (с которым связался Томалак) из https://developer.mozilla.org/en/DOM/event.initMouseEvent отлично работает для меня, и оно не требует прототипа или jquery.

function simulateClick() {
  var evt = document.createEvent("MouseEvents");
  evt.initMouseEvent("click", true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
  var cb = document.getElementById("checkbox"); 
  var canceled = !cb.dispatchEvent(evt);
  if(canceled) {
    // A handler called preventDefault
    alert("canceled");
  } else {
    // None of the handlers called preventDefault
    alert("not canceled");
  }
}
...