Como simular clique na âncora com um texto específico usando javascript em GreaseMonkey?
-
12-09-2019 - |
Pergunta
Suponha que eu carregar uma página que contém o seguinte âncora:
<a class="someClass" href="#" onClick="gotoPage('http://somepage.org')">Link</a>
O que eu quero é: assim que a página é carregada, eu quero gerar onClick para essa âncora que tem texto como "Link"
.Note que a âncora não contém qualquer id ou nome associado a ele. Assim document.getElementById ou document.getelementbyname não vai funcionar.
Solução
Como você está usando Greasemonkey você deve ser capaz de usar XPath para selecionar o link em questão usando um de seus atributos HTML:
http://diveintogreasemonkey.org/patterns/match-attribute.html
Outras dicas
Aqui está o que pessoas parecem fazer ser capazes de desencadear genericamente um evento click
no Firefox. Estendem-se o protótipo HTMLAnchorElement
com uma função click()
, assim:
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);
}
Consulte MDC para initMouseEvent()
.
Se você tem jQuery, você pode também verificar para fora trigger()
.
A solução (que Tomalak ligados a) a partir de https: //developer.mozilla. org / en / DOM / event.initMouseEvent trabalhou muito para mim, e não requer protótipo ou 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");
}
}