Ich habe ein Userscript für Google Reader und als Teil dieses Userscript muss ich eine Aktualisierung auslösen, was ich in FF mache, indem ich ein keypress für den Buchstaben r .

function simulateRefresh()
{
    var e = document.createEvent('KeyboardEvent');
    e.initKeyEvent('keypress', true, true, window, false, false, false, false, 82, 82);
    document.body.dispatchEvent(e);
}

Dies funktioniert in FF, aber nicht in Chrome. Anscheinend wird initKeyEvent nicht unterstützt und ich sollte initKeyboardEvent verwenden.
Bisher hatte ich kein Glück damit (Es gibt keinen Fehler in der Konsole, aber die Aktualisierung wird nicht ausgelöst.) Ich verwende jQuery, wenn das wichtig ist.

Ich habe auch versucht, click über die Schaltfläche "Aktualisieren" auszulösen, dies ist jedoch in beiden Browsern fehlgeschlagen (nicht sicher, warum das Klickereignis laut Chrome-Debugger ausgelöst wird, aber der Code ist verschleiert, sodass ich es nicht herausfinden kann ).

1
Pyro979 6 Okt. 2012 im 20:52

4 Antworten

Beste Antwort

Google-Webanwendungen verwenden häufig kein einfaches keypress oder click, wenn eine komplexe Folge von Zuständen ausreicht. ;-);

Das Senden eines "Klicks" an die Schaltfläche "Aktualisieren" funktioniert also nicht, das Senden einer "Over, Down, Up" -Triade jedoch. Wie so:

var refreshBtn = document.querySelector ('#viewer-refresh');

//--- Click by itself does not work!
triggerMouseEvent (refreshBtn, 'mouseover');
triggerMouseEvent (refreshBtn, 'mousedown');
triggerMouseEvent (refreshBtn, 'mouseup');

function triggerMouseEvent (node, eventType) {
    var clickEvent = document.createEvent('MouseEvents');
    clickEvent.initEvent (eventType, true, true);
    node.dispatchEvent (clickEvent);
}


Eine ähnliche Art von Zustandssequenz kann für die Tastenkombination erforderlich sein. (Der Test wird fortgesetzt.)

Update: Informationen zu Tastaturereignissen finden Sie unter dieser Antwort, in der Webkit-Fehler 16735:" Mit DOM erstellte Tastaturereignisse haben keyCode und charCode von 0 " - was noch offen ist nach 4,5 Jahren (!!) und könnte hier gelten.

1
Community 23 Mai 2017 im 12:18

Ich denke, Sie versuchen, das Ereignis aus Ihrem Inhaltsskript auszulösen. Leider funktioniert das nicht. Sie müssen den Code in die Seite einfügen:

function injectJavaScript(textContent) {
  var scriptElement = document.createElement('script');
  scriptElement.textContent = textContent;

  (document.getElementsByTagName('head')[0] || document.body || document.documentElement).appendChild(scriptElement);
}

var code = '(' + function() {
  var e = document.createEvent('KeyboardEvents');
  e.initKeyboardEvent('keypress', true, true, window, false, false, false, false, 82, 82);
  document.body.dispatchEvent(e);
} + ')();';

injectJavaScript(code);
0
Community 23 Mai 2017 im 11:43

Ihre Lösung besteht darin, zu überprüfen, ob die Methode initKeyboardEvent implementiert ist oder nicht.

var e = document.createEvent('KeyboardEvents');
(e.initKeyboardEvent || e.initKeyEvent).call(e, 'keypress', true, true, window, false, false, false, false, 82, 82);
document.body.dispatchEvent(e);

Das funktioniert bei mir in Chrome.

0
J. K. 6 Okt. 2012 im 17:02

Versucht $('#refreshButton').trigger('click');?

0
mschr 6 Okt. 2012 im 17:01