JavaScriptのbuilt-inメソッドのpreventDefaultを上書きする方法
複数のライブラリを利用してるときに、誰かがpreventDefault()をしているようで、mousedownのデフォルトアクションが実行されない。
preventDefault()を上書きをしてブレークポイントを貼って、スタックトレースでそいつを突き止めたい。
方法1: 単純にprototypeを上書きする
Operaだと下記で成功するが、Firefox3ではうまくいかなかった。
function neko(){ debugger; alert('neko'); } Event.prototype.preventDefault = neko;
方法2: イベントのpreventDefaultを上書きする
下記のようにすると、Firefoxでも上書きができた。
function neko(){ debugger; alert('neko'); } // mousedownは取りたいイベントによって変える。 document.addEventListener('mousedown', (function(in_e){ in_e.preventDefault = neko; }), true);
capturingは上から辿られるので、documentでイベントのpreventDefaultを上書きしたら、その後のcapturing, bubbling, targetフェーズでpreventDefaultが呼ばれたときに、上書きした奴が呼ばれる。
厳密にはいろいろ抜けがあるが、実用上はこれで問題なさそう。
もう少し改良して、greasemonkeyにでもするか。