1

私はGoogleリーダーのユーザースクリプトを持っています。そのユーザースクリプトの一部として、更新をトリガーする必要があります。これは、Firefoxでkeypress文字のをシミュレートすることによって行いrます。

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

これはFirefoxで機能しますが、Chromeでは機能しません。どうやらinitKeyEventサポートされていません、そして私はを使用することになっていますinitKeyboardEvent
これまでのところ、これはまったくうまくいきませんでした(コンソールにエラーはありませんが、更新は実行されません)。それが重要な場合は、jQueryを使用しています。

更新ボタンでもトリガーclickを試みましたが、両方のブラウザーで失敗しました(Chromeデバッガーに従ってクリックイベントが発生する理由はわかりませんが、コードが難読化されているため、わかりません)。

4

4 に答える 4

1

Googleのウェブアプリは、複雑な状態のシーケンスで使用される場合、単純なkeypressまたはを使用しないことがよくあります。click;-)

したがって、更新ボタンに「クリック」を送信することはできませんが、「上、下、上」のトライアドを送信することはできます。そのようです:

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);
}


キーボードショートカットにも同様の状態シーケンスが必要になる場合があります。(テストは続行されます。)

更新: キーボードイベントについては、 Webkitバグ16735に言及しているこの回答を参照してください:「DOMで作成されたキーボードイベントのkeyCodeとcharCodeは0です-これは4。5年後も開いており(!!)、ここに適用される可能性があります。

于 2012-10-06T18:31:51.300 に答える
0

試しました$('#refreshButton').trigger('click');か?

于 2012-10-06T17:01:16.420 に答える
0

解決策は、initKeyboardEventメソッドが実装されているかどうかを確認することです。

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);

これはChromeで機能します。

于 2012-10-06T17:02:20.170 に答える
0

コンテンツスクリプトからイベントをディスパッチしようとしていると思いますが、残念ながらそれは機能しません。ページにコードを挿入する必要があります

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);
于 2012-10-06T18:27:17.437 に答える