特定のDOMイベントにイベントハンドラーがバインドされているかどうかを検出することは可能ですか(ブラウザーのデフォルトのイベント処理を含む) -FirefoxのGreasemonkeyコード(EcmaScript 5.1 strictモード)内で?
これまでのところ、テキストが選択されたときにクリックイベントの処理をキャンセルすることができましたが、クリックイベントがデフォルトのアクションをトリガーする次のすべての状況でイベント処理をキャンセルしたいと思います。
- ページ上のテキストの選択
- コンテキストメニューが表示されます(つまり、右クリック)
- リンクをたどる(左クリック
<a>
) - フォーム要素が操作されます(テキストボックスにフォーカスが移り、カーソルが点滅し始め、ラジオボタンが選択されます...)
- イベントを処理するその他のJavaScriptコード(ポップアップヘルプダイアログが表示されるなど)
このためのキャッチオールメカニズムはありますか、それともコード内のすべての状況を明示的に綴る必要がありますか?
次のコードは、選択が行われたことを検出する方法です。
var toggleHighlight = function(){
var oldTargt;
return function(e){
targt = e.target;
sel = window.getSelection();
if (!sel.isCollapsed && sel.containsNode(targt, true)) {
return;
}
...
oldTargt = targt;
}()
document.addEventListener('click', toggleHighlight);
注:
-スクリプトで伝播を停止したくありません。イベントが他のハンドラーに伝播される場合は、スクリプトを停止したいと思います。
-デフォルトのブラウザイベントハンドラーをキャッチしない場合
、 JQueryイベントハンドラーのみの
ソリューションには興味がありません。-この機能が実際に存在しない場合は、自分の意見だけでなく、いくつかの記事やブログを引用してください。
-特定の提案を歓迎しますが、私は主に一般的な解決策の存在に興味があります。
更新:受け入れ可能なソリューションは次のとおりです。
if
私がチェックする必要がある条件の網羅的な(っぽい)リスト- FirefoxプラグインからアクセスできるJavaScript以外の方法
- 有効な要素をクリックすると新しいURLのリロードがトリガーされることをFirefoxが
<a>
認識する方法と、このロジックにjavascript/pluginsからアクセスできない方法の説明