10

キーボードショートカットを使用してスクリプトを起動するChrome拡張機能を作成しています。ほとんどのページで正常に機能しますが、Gmailでは機能しないことに気付きました。すべてのキーボードイベントがGmailによってキャプチャされ、私の機能にバブルされていないようです。

私は次のようなコンテンツスクリプトを持っています(Chrome拡張機能ではこれは必要なページに追加されます):(もちろん簡略化されています):

document.body.addEventListener('keypress', myFunction, true);
function myFunction(event) {
    console.log("yay, Gmail didn't let me down!");
}

しかし実際には、Gmailは私をがっかりさせます。スクリプトがロードされていることを知っています。さまざまなバリエーションwindow.addEventListenerや他のイベントタイプを試しましたが、役に立ちませんでした。

誰かがこれを回避する方法を知っていますか?私はGreaseMonkeyスクリプトがそれを実行できるかどうかを確認しようとしましたが、それは私をここに連れてきました:http ://code.google.com/p/gmail-greasemonkey/しかし、それは私を助けませんでした。

4

3 に答える 3

1

さて、onePasswordプラグインからリバースエンジニアリングされた実用的なソリューションがあります。これが機能する理由を推測することしかできません。これは、入力要素にイベントを追加したためだと思います。ただし、何かを変更すると機能しなくなります(下部のredir呼び出しは理由により下部にあります)

function redir(e) {
    e.focus();
    var h = document.createEvent("KeyboardEvent");
    h.initKeyboardEvent('keydown', true, true);
    e.dispatchEvent(h)
}
$("input").each(function(t,l) {redir(l)});

document.addEventListener('keydown', function(e) {
    if (e.ctrlKey && e.keyCode) {
      if (e.keyCode == 190) {
        chrome.extension.sendRequest({name: "spot-openPopUp"});
      }
    }
},false);

redir(document.body);

ご覧のとおり、リダイレクトを使用しました。この例は本当に粗雑なので、単に使用しないでください

于 2010-11-09T15:26:20.450 に答える
1

Gmailのキーボードイベントキャプチャの内部動作はわかりませんが、最近、Chrome用の簡単なキーボードショートカットナビゲーターを作成しました(したがって、マウスを使用してリンクをクリックする必要はありません)。

これは拡張機能ではなく、ユーザー/ Greasemonkeyスクリプトですが、カンマ(、)を2回入力することでトリガーされ、GMailで機能します。

多分それはあなたがソースを見るのを助けるでしょう。ここからダウンロードできます:http://userscripts.org/scripts/show/68609

于 2010-02-25T13:19:07.510 に答える
0

リダイレクトのプロセスを試すことができます。

if (document.body.onkeypress) {
    // add as event listener instead
    var kpfunc = document.body.onkeypress;
    document.body.addEventListener('keypress', kpfunc, true);
}
于 2010-02-24T05:55:51.673 に答える