2017-08-16 9 views
0

現在、拡張機能がロードされているページでデフォルトのクリックアクションが発生しないようにするために、クロム拡張機能を使用しています。通常、私はちょうどデフォルトのアクションを防ぐために、以下のようなものだろう:イベントバブリングと伝播の階層

$('.some-element').click(function(e){ 
e.preventDefault() 

// some other code 

}); 

を私は拡張子で、ここで同じアプローチを使用していますが、私は何を見つけることだと、時々、これが機能し、他の回ではないということです。たとえば、ページの領域にある<a>タグにpreventDefaultが既にバインドされているサイトにアクセスした場合、そのウェブサイトのpreventDefaultは、自分のイベントが実行されないようにします..

クリックイベントは機能します - 最初に読み込まれた関数は常に最初に起動しますか?もしそうなら、私のイベントが常に最初に始まるように、イベントに階層を課すことができるので、ページにロードされている他のアクションを防ぐことができますか?

ページは一時的にしか私はそれらを再度バインドすることはできません場合、私は完全に適していない可能性がありますすべてのイベントをバインド解除のアプローチを無効にする必要に既に存在しているアクション..

おかげ

+0

あなたがイベントに私をクリックして聞くためにJavaScriptコードを注入していると言っています他の人のウェブサイトのChromeのデベロッパーコンソールを想定していますか?私はあなたのウェブサイトと他のウェブサイトの両方に言及した方法を混同しています。あなたがしようとしていると思っていることをしようとしているなら、私はそれがうまくいくとは思わない。 –

+0

基本的には、私のコンテンツスクリプトを通してページに挿入するコードを介して、ウェブサイト上でデフォルトのonClickイベントが発生しないようにしようとしています。そこから私は自分の関数を使っていくつかのことをしたいと思っています。これまでのところうまくいきましたが、すでにイベントがある場合、私は言ったように.preventDefaultはウェブサイト上の要素に設定されています。event.peventDefaultは私のコンテンツスクリプトを介してページに注入したevent.preventDefaultとは違って起動します。私は一度私のウェブサイトに言及しているとは思わない...クロムの拡張子だ –

+1

ウィンドウの最上位のDOMオブジェクトにmousedownリスナを付け、addEventListenerのuseCaptureパラメータにtrueを指定すると、キャプチャの開始時にイベントをインターセプトするウィンドウからクリックターゲットまでのフェイズこのコードは、ターゲットのマウスダウンの前に実行されます。また、document_startで実行されるコンテンツスクリプトでそれを行うと、そのページを上書きすることはできません。 – wOxxOm

答えて

0

通常のイベントリスナー(Element.addEventListener)とjQuery .click/.onは2つの異なることに注意してください。 jQueryは一度リスナーを設定し、コールバックの内部配列を持ちます。

あなたが撮影モード(第3引数)を使用して、ウィンドウにリスナーを追加し、発射からリスナーのすべての特定の種類を防ぎたい場合:

window.addEventListener('mousedown', (e) => { 
    e.preventDefault() 
}, true); 
+0

これをwOxxOmの提案と組み合わせるといいでしょうか:mousedownイベントリスナーの代わりに、イベントリスナーをウィンドウの代わりに追加すると、上記のコードにもっと確実性が追加されますか? –

+0

@BenLigerはい、確かです。完了しました。 – reski

+0

ほぼあります...私のコードを修正した後、私のイベントは以前はそれがなかったサイトで発生するようになりました。唯一の問題は、MYのデフォルトを無効にしても動作しない、つまりページの他の機能がまだ私と並行して起動しているということです。 –