0

私は、ユーザーがWebページの任意の場所でマウスの右ボタンをクリックしたときにいくつかのことを実行したいという非常に単純なFirefoxアドオンを作成しています。私はそれを機能させましたが、奇妙なことに、Firefox UIからもすべての右クリックを取得します(ツールバー、タブ、URLバーなど)。もちろん、私はそれらに興味がありません。

document.addEventListener("contextmenu", function(e) {
    // do stuff here
}, true);

私は最初にこのリスナーをウィンドウに持っていましたが、それは何も変わりません。

Webサイトで右クリックが発生した場合にのみイベントをトリガーする方法に関するヒントはありますか?

4

1 に答える 1

2

ブラウザーウィンドウオーバーレイからコードを実行していると思いdocumentます。イベントリスナーをアタッチするのは、ブラウザーウィンドウのXULドキュメントです。必要なのがブラウザからのイベントだけである場合は、イベントリスナーをブラウザに接続する必要があります。ブラウザにはいくつかのユーザーインターフェイス(通知バー)もあるため、これでも希望どおりの結果は得られませんが、イベントターゲットがコンテンツドキュメント内にあるかどうかを簡単に検出できます。

gBrowser.addEventListener("contextmenu", function(e) {
    if (e.target.ownerDocument.defaultView.top == window)
      return;

    // do stuff here
}, true);

これはwindow.top、ブラウザ内のウィンドウのトップコンテンツウィンドウであるという事実を使用しています。XULコードの境界を越えることはできません。ブラウザのUI要素の場合、実際のトップウィンドウが表示されますが、これは実行するウィンドウです。

于 2012-06-28T18:32:57.000 に答える